For someone who's also wondering.
PHP can work even if there is no configuration file(php.ini) loaded,
it will simply applies the default values to directives.
設定ファイル (php.ini) は PHP の起動時に読み込まれます。 PHP のサーバーモジュール版では、Web サーバーの起動時に 一度だけ読み込まれます。CGI 版と CLI 版では、スクリプトが呼び出される度に読み込まれます。
読み込む php.ini は、これらの場所を順に探します。
PHPIniDir
ディレクティブ、
CGI/CLI 版における -c
コマンドラインオプション)
php.ini
を使用することができます。レジストリキーの root は、
インストールされたOS や PHP が 32bit や 64bit どちらのビルドかによって変わります。
32bit OS 上の 32bit ビルドの PHP、
もしくは 64bit OS 上の 64bit ビルドの PHP は
[(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
を使いますが、
64bit OS 上での 32bit ビルドのPHPは、
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
] を代わりに使います。
ビルドのbit数がOSと同じPHPのインストールの場合、
以下のレジストリキーを順に調べて使用します。
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z]
、
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]
および
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]
。
x、y および z はそれぞれ PHP のメジャーバージョン、マイナーバージョン、
リリース番号を表します。
64bit OS の 32bitビルドの PHP では、
以下のレジストリキーを順に調べて使用します。
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]
および
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x]
x、y および z はそれぞれ PHP のメジャーバージョン、マイナーバージョン、
リリース番号を表します。
これらのキーに IniFilePath
の値が設定されていれば、最初に見つかった場所の php.ini
を使用します (Windows のみ)。
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
または
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
にある
IniFilePath
の値 (Windows のみ)。
現在の作業ディレクトリ (CLI を除く)
--with-config-file-path
php-SAPI.ini (ここで SAPI は使用する SAPI 名。 たとえば php-cli.ini や php-apache.ini) が存在する場合、 php.ini の代わりに使用されます。 SAPI 名は php_sapi_name() によって決定されます。
注意:
Apache web サーバーは、スタート時にディレクトリをルート に変更するので、ファイルシステムのルートに php.ini が存在する場合、PHP はそれを読もうとします。
php.ini の中で環境変数を使うには、次のようにします。
例1 php.ini での環境変数
; 環境変数 PHP_MEMORY_LIMIT を利用します memory_limit = ${PHP_MEMORY_LIMIT}
拡張モジュールに対する php.ini ディレクティブは、 各拡張モジュールのドキュメントで解説されています。 コア ディレクティブ (PHP 本体に対するディレクティブ)のリストは付録にまとめられています。 ただし、(更新の都合上)すべての PHP ディレクティブが 本マニュアル中で解説されている訳ではありません。 使っているバージョンの PHP で指定可能なすべてのディレクティブについては、 php.ini ファイル内に詳細なコメントが記されていますので、参照ください。 もしくは、Git から入手可能な » 最新の php.ini も有用でしょう。
例2 php.ini の例
; 引用符をつけないセミコロン(;)の後のテキストは、すべて無視されます [php] ; セクションマーカ (角括弧の中のテキスト) は無視されます ; 論理値は、次のいずれかで指定します ; true, on, yes ; または false, off, no, none register_globals = off magic_quotes_gpc = yes ; 文字列を二重引用符で括ることも可能です include_path = ".:/usr/local/lib/php" ; バックスラッシュは他の文字と同様に処理されます include_path = ".;c:\php\lib"
ini ファイル内で既存の ini 変数を参照することが可能です。
例: open_basedir = ${open_basedir}
":/new/dir"
PHP の設定で、php.ini を読んだ後に .ini ファイルを探すディレクトリを指定できます。 これは、コンパイル時のオプション --with-config-file-scan-dir で設定します。 このスキャンディレクトリは実行時に上書きできます。 環境変数 PHP_INI_SCAN_DIR で指定します。
複数のディレクトリを指定するには、各プラットフォームのパス区切り文字
(Window や NetWare そして RISC OS の場合は ;
、
その他のプラットフォームの場合は :
。PHP が用いる値は定数
PATH_SEPARATOR
で取得できます)
を用います。PHP_INI_SCAN_DIR に空文字列が指定された場合は、
PHP のコンパイル時に
--with-config-file-scan-dir
で指定されたディレクトリもスキャンします。
指定されたディレクトリの中にあるファイルの中で、ファイル名が
.ini
で終わるすべてのファイルを、アルファベット順にスキャンします。
読み込まれたファイルの一覧とその順序を調べるには、
php_ini_scanned_files() を呼ぶか、あるいは
--ini オプションつきで PHP を実行します。
PHP のコンパイル時に --with-config-file-scan-dir=/etc/php.d を指定しており、パス区切り文字が : であるものとします $ php PHP は /etc/php.d/*.ini を設定ファイルとして読み込みます。 $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP は /usr/local/etc/php.d/*.ini を設定ファイルとして読み込みます。 $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP はまず /etc/php.d/*.ini を設定ファイルとして読み込み、 続いて /usr/local/etc/php.d/*.ini も設定ファイルとして読み込みます。 $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP はまず /usr/local/etc/php.d/*.ini を設定ファイルとして読み込み、 続いて /etc/php.d/*.ini を設定ファイルとして読み込みます。
For someone who's also wondering.
PHP can work even if there is no configuration file(php.ini) loaded,
it will simply applies the default values to directives.
in php.ini you can reference to an existing directive or an environment variable using the syntax ${varname}.
Here are some examples.
sys_temp_dir = "${WINDIR}"
--- ${WINDIR} will be replaced by $_ENV['WINDIR'] at runtime
--- you can set environment variables by Apache and use them in php.ini
--- FcgidInitialEnv AUTHOR "WUXIANCHENG"
--- error_log = "${AUTHOR}.log"
error_log = "${sys_temp_dir}"
--- ${sys_temp_dir} will be replace by the value of sys_temp_dir
Also you can use PHP constants in php.ini, but DONT'T wrap them in ${} or "".
error_log = "/data/"PHP_VERSION"/"
--- it works like this php code:
$error_log = "/data/" . PHP_VERSION . "/";