Home > ブログ > PHPの設定ファイルやログファイルの場所

ブログ

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

タグ: Server PHP

Webサーバーのことで何かお困りですか?
ちょっとしたことから対応できます。
お困りのことがございましたらお気軽にお問いあわせください。
詳細はこちら。

・PHP8対応作業はこちら

・メールが届かない場合の対応作業は30,000円~対応可。詳細はこちら

Top

アーカイブ

タグ

Server (28) 作業実績 (21) PHP (19) ネットワーク (17) プログラミング (15) OpenSSL (10) C (8) C++ (8) PHP関連更新作業 (8) EC-CUBE (7) Webアプリ (7) laravel (6) 書籍 (5) Nginx (5) Linux (5) AWS (4) Vue.js (4) JavaScript (4) 与太話 (4) Rust (3) Symfony (2) お知らせ (2) Golang (2) OSS (1) MySQL (1) デモ (1) CreateJS (1) Apache (1)