web-dev-qa-db-fra.com

D'où mon php.ini est-il chargé?

J'exécute ceci instance Docker d'un debian linux: jessie avec php 5.6.

Cela fait partie de mon phpinfo:

enter image description here

Comme nous pouvons voir le php.ini doit être situé à

/usr/local/etc/php

Et voici ce que j'ai dans/usr/local/etc /

enter image description here

Mais il n'y a pas de php.ini dedans.

J'ai d'autre part, j'ai le php.ini à l'intérieur

enter image description here

Alors, d'où exactement mon php.ini est-il chargé?

Nous n'avons même pas de processus php en cours mais le php semble être correct - étant affiché phpinfo à l'écran.

enter image description here

6
zwitterion

Essayons comme réponse:

Il n'existe pas du tout, ce qui signifie que php exécutera les options par défaut.

Regardez votre fichier docker, il démarre à partir d'un OS "propre", y installe Apache et PHP. Mais il ne copie jamais le fichier php.ini de l'installation PHP dans/usr/local/etc/php. En fait, aux lignes 31 et 32, il crée le répertoire conf.d mais c'est tout.

Je suggère donc, à la fin de votre fichier docker, d'ajouter du code pour copier php.ini-production dans /usr/local/etc/php.ini, et des modifications si nécessaire. Ou utilisez les options par défaut.

5
Nic3500

Le fichier php.ini par défaut recherché par les images php docker est:

 /usr/local/etc/php/php.ini

Vous pouvez le voir dans la sortie de la fonction phpinfo (exécutez simplement "php -a" dans le conteneur puis "phpinfo ();" à l'invite):

Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

Vous pouvez toujours lier ce fichier en tant que volume pour en obtenir un personnalisé lorsque vous exécutez le conteneur avec une option -v comme:

docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]

Je préfère généralement utiliser le fichier ini par défaut qui l'accompagne, avec seulement quelques options modifiées selon mes besoins. Si vous souhaitez que votre conteneur le fasse pendant la génération, vous pouvez faire quelque chose comme ceci dans le Dockerfile:

    RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini && \
        sed -i -e "s/^ *memory_limit.*/memory_limit = 4G/g" /usr/local/etc/php/php.ini

Les commandes RUN ci-dessus copient le fichier ini de production par défaut, puis modifient le memory_limit et le définissent sur 4G dans le fichier ini.

Je préfère cette méthode car elle permet d'utiliser des configurations personnalisées afin que le conteneur fonctionne toujours avec les valeurs par défaut lorsqu'il est extrait, mais vous avez toujours la possibilité de remplacer le fichier ini dans le conteneur en passant un volume.

3
johnjg12

Un peu tard pour la fête mais comme la question est toujours d'actualité aujourd'hui, permettez-moi d'ajouter une réponse courte:

PHP officiel: 7 images obtiennent leurs paramètres de /usr/local/etc/php dossier.

# First log into the running container
$ docker exec -it «container_name» /bin/bash

# List folder content
$ ls /usr/local/etc/php

# Which outputs following line
conf.d  php.ini-development  php.ini-production

Si nécessaire, la modification des paramètres via le dossier conf.d semble une meilleure alternative, car xdebug l'utilise. Par exemple, vous pouvez modifier la taille du téléchargement en ajoutant uploads.ini à conf.d dossier avec le contenu suivant:

file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

La liste complète des directives ini est disponible sur https://www.php.net/manual/en/ini.core.php

2
SnnSnn

En bref, vous n'en avez pas besoin. Si vous manquez ou souhaitez ajouter des extensions, vous pouvez le faire dans votre Dockerfile en faisant docker-php-ext-install ou docker-php-ext-enable.

La plupart des plus courants, vous pouvez simplement activer, comme mbstring par exemple, mais pour certains moins courants, vous devrez peut-être exécuter pecl en premier ou quelque chose pour obtenir le package. Jetez un oeil à cette page de documentation Docker pour plus d'informations sur les extensions php

0
twoTimesAgnew