PHPの設定ファイルやログファイルの場所
お客様からのお問い合わせで、「PHPで作られたシステムが動かない/動かなくなったので自分で調べようとしたが、上手くいかない」。具体的には、
- ログファイルの場所が分からない
- ログファイルを確認したが、ログが出力されていない
- 調査のために設定ファイルを変更したが反映されない
のような問い合わせをいただくことが何度かありました。
以前ならば、設定ファイルは/etc/php.ini、ログファイルはphp.iniで指定されたファイルをみればよかったのですが、最近では動作モード(Server API - SAPI)がモジュールモードからFPMに変わってきていたり、remiリポジトリから複数バージョンをインストールしていたりするので、関連ファイルが多く、どのファイルを見れば良いのかわかりにくくなってきています。
そこで、PHPの設定ファイルやログファイルの場所を整理してみました。
前提としてRedHat系のOSがインストールされた専用サーバーやVPSなどが対象です。Pleskがインストールされているようなサーバーは、設定がかなりカスタマイズされているので対象外です。PleskがインストールされているならPleskの管理画面から簡単に確認できると思います。
PHPのServer API
PHPでWebアプリケーションを動作させる場合、PHPには様々な動作形態があります。 現在どの形式で動作しているかは、phpinfo()の実行結果の"Server API"で確認できます。php_sapi_name()関数でも確認できます。Server APIの例として以下のようなものがあります。
表1 SAPIの例
Server API | php_sapi_name() | 説明 |
---|---|---|
Apache 2.0 Handler | apache2handler | Apacheのmod_phpを使って動作させる。 Apacheのモジュールとして動作するためモジュールモードとも呼ばれる。 |
FPM/FastCGI | fpm-fcgi | PHPによるFastCGI実装を使ってPHPスクリプトを動作させる。プロセス数などを細かく設定できる。現在の主流。 |
CGI/FastCGI | cgi-fcgi | PHPスクリプトをFastCGI形式で動作させる。レンタルサーバーなどではこれが使われているかもしれない。 |
Command Line Interface | cli | コマンドラインから直接PHPを実行した場合のSAPI。WebアプリケーションとしてPHPを使う場合には関係ない。 |
Web関連でみるのは、ほぼApache 2.0 HandlerとFPM/FastCGIでしょう(*1)。
WebサーバーがApache全盛の頃はApache 2.0 Handlerが主流でしたが、最近の専用サーバーやVPS(クラウド含む)では、ほぼFPM/FastCGIが使われていると思います。 Apache 2.0 Handlerが使われているのは、CentOS7のデフォルトのphp5.4を使っている環境くらいでしょうか。
参照すべき設定ファイルがどこにあるかを知るにはどのSAPIで動作しているかを把握しておく必要があります。 サーバーの設定を確認したり、仮想ホスト内でphpinfo()を実行するなどして事前に把握しておきましょう。
まずは設定ファイルの場所
まずは設定ファイルの場所を整理します。システムデフォルトのPHPを使っているなら
/etc/php.ini
が設定ファイルになります。 これは、phpinfo()の"Loaded Configuration File"でも確認できます。
動作モードがApache 2.0 Handlerなら上記ファイルで終わりですが、FPM/FastCGIの場合はさらに以下の設定ファイルがあります。
/etc/php-fpm.conf
FPM全体に渡る設定ファイル。FPMの設定を修正する場合、以下のpool(*2)ごとの設定ファイルを修正することがほとんどだと思いますので今回は詳しくは触れません。
/etc/php-fpm.d/www.conf
poolごとの設定ファイル。php-fpm.d/*には複数のpoolの設定ファイルを置くことができますが、デフォルトではwww poolの設定ファイルであるwww.confのみ存在します。
FPMの場合は、/etc/php.iniの設定を基本として、上記pool用設定ファイルでPHP設定を上書きするようになっています(PHPに関する設定はphp_admin_valueやphp_valueで行います)。先に説明したように最近ではFPMが主流なので、これらの設定ファイルをみなければならないことが多いでしょう。
例えば /etc/php-fpm.d/www.conf ではデフォルトでエラーログに以下のような設定がされています。
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
このため、/etc/php.iniにerror_logを設定しても、/etc/php-fpm.d/www.confの設定で上書きされてしまうので、「設定がうまく反映されない!」と勘違いしてしまうというケースがちょくちょくあるようです。
一方、remiでインストールしたPHPを使っているなら設定ファイル系は/etc/opt/remi/php82/にインストールされています(*3)。
PHP8.2なら基本の設定ファイルは、
/etc/opt/remi/php82/php.ini
となります。これも、phpinfo()の"Loaded Configuration File"で確認できます。
FPMならさらに以下の設定ファイルも読み込むことになります。
/etc/opt/remi/php82/php-fpm.conf
/etc/opt/remi/php82/php-fpm.d/www.conf
設定ファイルの場所は異なりますが、考え方はシステムデフォルトのPHPと同じです。 設定ファイルを確認する際は、関係ないファイルを参照して時間を無駄にしないように以下に気をつけてください。
- phpinfo()のLoaded Configuration Fileで設定ファイルの場所を確認
- SAPIがFPMならFPMの設定ファイルも確認すること
次にエラーログファイルの場所
ログファイルを探すにはerror_log設定を確認するのが一番確実です。 設定ファイルを確認してもいいですが、phpinfo()でerror_logの値を確認するのが確実でしょう。
ここでは、デフォルト設定で使っている場合に出てくるログファイルの例をいくつかあげておきます。
/var/log/httpd/error_log
システムのデフォルトのPHPをmod_phpで使っている場合のログファイル。
デフォルトの/etc/php.iniではerror_logが未指定なので、SAPIがApache 2.0 Handlerの場合、Apacheのエラーログである本ファイルに出力されます。仮想ホストが設定されているなら、その仮想ホストのエラーログに出力されます。
/var/log/php-fpm/www-error.log
システムのデフォルトのPHPをFPM/FastCGIで使っている場合は、このログファイルに出力されます。FPMの設定ファイルである/etc/php-fpm.d/www.confで以下のようにログファイルが上書き設定されているためです。
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
remiからインストールしたPHPを使っている場合は、以下のファイルにログが出力されます(remiからインストールしたPHPを使っている場合はほぼFPMでしょう)。
/var/opt/remi/phpXX/log/php-fpm/www-error.log
※ XXはPHPのバージョン番号になります。
まとめ
まとめるとデフォルト状態での設定ファイルやログファイルは以下のようになります。
[システムデフォルトのPHP]
(1) /etc/php.ini
システムデフォルトのPHP(/usr/bin/php)の設定ファイル。
デフォルトの設定ではerror_logは指定されていないので、エラーログの出力先はSAPIにより異なる。Apache 2.0 HandlerならApacheのエラーログファイル(/var/log/httpd/error_logとか)に出力される。
(2) /etc/php-fpm.d/www.conf
システムデフォルトのphp-fpmのpool設定ファイル。FPM/FastCGIで動作させている場合は、/etc/php.iniの設定をベースに本ファイルの設定が上書きされます。
(3) /var/log/php-fpm/www-error.log
システムデフォルトのphp-fpmのエラーログファイル。 (2)のphp_admin_value[error_log]で指定されています。
[remiからインストールしたPHP]
remiからインストールしたPHPについては以下のようになります(8.2での例)。 複数バージョンインストールしている場合は、phpXXのXX部分の数字が変わるだけです。
(4) /etc/opt/remi/php82/php.ini
remiでインストールしたphp8.2の設定ファイル(/etc/php.ini相当)
(5) /etc/opt/remi/php82/php-fpm.d/www.conf
remiでインストールしたphp8.2のphp-fpmのpool設定ファイル(/etc/php-fpm.d/www.conf相当)
(6) /var/opt/remi/php82/log/php-fpm/www-error.log
remiでインストールしたphp8.2のphp-fpmのエラーログ。 /var/log/php-fpm/www-error.log相当。 これも(5)で設定されています。
エラーが発生した場合、速やかに調査を行うには、設定ファイルやログファイルの場所を把握しておく必要があります。 昨今、複数バージョンのPHPをインストールしていることも多く、設定ファイルやログファイルの場所がわかりにくくなっています。 関連するファイルが多すぎてどこをみればいいのかよくわらない、といわれることもあるので、ここにまとめました。
(*1) レンタルサーバーではCGI/FastCGIも使われていますが、今回はお客様が自分で管理しているサーバーを対象にしたいので、ここでは触れません。
(*2) php-fpmにはpoolという概念があり、各poolごとに設定を持つことができます。poolごとにプロセス数を制限したり実行権限(ユーザー)の設定を変更できます。デフォルトではwwwというpoolがひとつ作成されています。
(*3) これはPHP8.2での例。"82"の部分はバージョンごとに異なります。
投稿日:2023/07/12 15:57