web-dev-qa-db-ja.com

php.iniはどこから読み込まれますか?

私はこれをphp 5.6で実行しています linux debian:jessieのDockerインスタンス

これは私のphpinfoの一部です:

enter image description here

ご覧のとおり、php.iniは次の場所にあります

/usr/local/etc/php

そして、これは/ usr/local/etc /の中にあります

enter image description here

しかし、その中にphp.iniはありません。

一方、php.iniは内部にあります

enter image description here

それで、私のphp.iniはどこからロードされていますか?

Phpプロセスも実行していませんが、phpは問題ないようです-画面にphpinfoが表示されています。

enter image description here

7
zwitterion

答えとして試してみましょう:

これはまったく存在しません。つまり、phpはデフォルトのオプションを実行します。

Dockerファイルを見てください。「クリーン」なOSから始まり、ApacheとPHPがインストールされます。ただし、php.iniファイルをPHPインストールから/ usr/local/etc/phpにコピーすることはありません。実際には31行目と32行目にconf.dディレクトリが作成されますが、それだけです。

そのため、Dockerファイルの最後に、php.ini-productionを/usr/local/etc/php.iniにコピーするコードを追加し、必要に応じて編集することをお勧めします。または、デフォルトのオプションを使用します。

5
Nic3500

Docker phpイメージが探すデフォルトのphp.iniファイルは次のとおりです。

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

これは、phpinfo関数の出力で確認できます(コンテナーで「php -a」を実行し、プロンプトで「phpinfo();」を実行します)。

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

次のように-vオプションを指定してコンテナを実行すると、いつでもこのファイルをボリュームとしてリンクしてカスタムファイルを取得できます。

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

私は通常、付属のデフォルトのiniファイルを使用することを好みます。必要に応じてオプションをいくつか変更しただけです。ビルド中にコンテナーにこれを実行させる場合は、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

上記のRUNコマンドは、デフォルトのプロダクションiniファイルをコピーしてから、memory_limitを変更し、iniファイルで4Gに設定します。

カスタム構成を使用できるので、プルしたときにコンテナーは常にデフォルトで動作しますが、ボリュームを渡すことでコンテナー内のiniファイルをオーバーライドするオプションがあるため、この方法を使用します。

3
johnjg12

パーティーには少し遅れますが、質問は今日でも関連があるので、短い回答を追加しましょう。

公式のphp:7画像は/usr/local/etc/phpフォルダーから設定を取得します。

# 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

必要に応じて、xdebugがconf.dフォルダーを使用するため、conf.dフォルダーを介して設定を変更する方が良いと思われます。たとえば、uploads.iniフォルダーにconf.dフォルダーを追加して、次の内容でアップロードサイズを変更できます。

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

Iniディレクティブの完全なリストは https://www.php.net/manual/en/ini.core.php にあります。

2
SnnSnn

短い答えは、あなたはそれを必要としないということです。不足している場合や拡張機能を追加したい場合は、Dockerfileでdocker-php-ext-installまたはdocker-php-ext-enable

一般的なもののほとんどは、たとえばmbstringなどのように単純に有効にすることができますが、一般的でないものについては、最初にpeclを実行してパッケージを取得する必要がある場合があります。 PHP拡張機能の詳細については、 このDockerドキュメントページをご覧ください

1
twoTimesAgnew