## 設定ファイル

設定ファイル (php.ini) は PHP の起動時に読み込まれます。 PHP のサーバーモジュール版では、Web サーバーの起動時に 一度だけ読み込まれます。CGI 版と CLI 版では、スクリプトが呼び出される度に読み込まれます。

読み込む php.ini は、これらの場所を順に探します。

- SAPI モジュール特有の場所 (Apache 2 における `PHPIniDir` ディレクティブ、 CGI/CLI 版における `-c` コマンドラインオプション)
- PHPRC 環境変数。
- PHP のバージョンごとに別の場所の `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 を除く)

- Web サーバーのディレクトリ (SAPI モジュールの場合)、 もしくは PHP ディレクトリ (そうでない Windows の場合)
- Windows ディレクトリ (C:\windows もしくは C:\winnt)) (Windows の場合) 、もしくはコンパイル時のオプション `--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 の中で環境変数を参照するには、次のようにします。 PHP 8.3.0 以降では、参照する変数が未定義の場合にフォールバックする値を 指定できるようになりました。

例1 php.ini での環境変数

    ; 環境変数 PHP_MEMORY_LIMIT を利用します
    memory_limit = ${PHP_MEMORY_LIMIT}
    ; 環境変数 PHP_MAX_EXECUTION_TIME が未定義の場合、30 にフォールバックします
    max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}

拡張モジュールに対する 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 を設定ファイルとして読み込みます。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open