web-dev-qa-db-ja.com

ApacheはPHPエラーをログに記録しません

CLI経由のPHPは、エラーを/var/log/php_errors.logに正常に記録します。

ただし、Apache + phpはエラーを記録しません。

[bla@notebook ~]$ apachectl -v
Server version: Apache/2.2.17 (Unix)
Server built:   May 19 2011 03:15:39

[bla@notebook ~]$ php -v
PHP 5.3.6 with Suhosin-Patch (cli) (built: Mar 23 2011 13:28:00) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

php.iniにあります:

display_errors = On
error_reporting = E_ALL | E_STRICT
log_errors = On
error_log = php_errors.log

httpd.confで:

ErrorLog "/var/log/httpd/error_log"

許可:

[bla@notebook /]$ ls -la /var/log/httpd/
-rwxrwxr-x 1 root root 133351 21.11.2011 11:18 access_log*
-rwxrwxr-x 1 root http   1307 21.11.2011 11:18 error_log*

[bla@notebook /]$ ls -la /var/log/php_errors.log 
-rwxrwxr-x 1 root http 521 14.11.2011 17:31 /var/log/php_errors.log*

ご覧のとおり、Apacheデーモンにはログファイルに書き込む権限があります。

/var/log/php_errors.logおよび/ var/log/httpd/error_logにApacheまたはPHPからのエラーはまだありません。

更新1。

Php.iniの次の行を変更しました。

error_log = php_errors.log 

フルパスへ:

error_log = /var/log/php_errors.log 

許可は大丈夫だった。ただし、誰かが問題を抱えている場合は、logfile 0777へのアクセス権の設定またはファイル所有者の変更をデバッグできます。

20
Justinas Lelys

通常、ApacheとCLIには2つの別個のphp.iniファイルがあります。正しいファイルを探しているのですか?

編集:

私が考えることができる2つのオプション:

  • 一部のApacheディレクティブがPHPのログパスを混乱させています(または、ログオプションを無効にしますが、そうなる可能性は非常に低いです)-php.iniでログファイルへの絶対パスを設定してみてください(@Frosty Zはこのようなものを提案しています)
  • あなたのPHPインストールにはSuhosinパッチが適用されており、これはセキュリティを改善するためにいくつかの制限的な変更を行います。理論的にはhttpログファイルに書き込むユーザーグループ-おそらくsuphpのような動作がいくつかあり、Webを介してスクリプトにアクセスすると、所有者として設定されているユーザー名(またはスクリプトのファイル所有者)として実行されます。それを変える。
9
Narf

同じ問題がありました。

設定log_errors_max_len = 0 php.iniで私のために働いた。

PHPマニュアル

Log_errorsの最大長をバイト単位で設定します。 error_logに、ソースに関する情報が追加されます。 デフォルトは1024であり、0は最大長をまったく適用しないことを許可します。この長さは、記録されたエラー、表示されたエラー、および$ php_errormsgに適用されますが、error_log()などの明示的に呼び出された関数には適用されません。

5
Stelian

過去には、2つのケースでエラーログがありませんでした。

  1. Apacheを実行していたユーザーには、php_error_logファイルを変更する権限がありませんでした。
  2. エラー500は、.htaccessの設定が不適切であるために発生しました。たとえば、書き換えモジュールの設定が間違っています。この場合、エラーはApache error_logファイルに記録されます。
2
sgnsajgon

httpd.confは、Apache configが配置できる唯一の場所ではありません。

例えば:

安全な接続https://を使用する場合、余分な設定が優先され、/opt/local/Apache2/conf/extra/httpd-ssl.confのようなファイルで設定を探す必要があります。

あなたはそこのようなものを見つけることができます:

ErrorLog "/var/log/Apache/ssl_error.log"

また、通常のログファイルにエラーが記録されることはありませんが、それらはすべてssl_error.logに記録されます。

0

これは、Apache独自のLogLevelディレクティブによっても発生する可能性があります。これは、設定が高すぎるとPHPのロギングをオーバーライドします。ただし、ページでエラーを出力するPHPの機能(display_error)を無効にすることはなく、CLI PHPにも影響しません。その特定の症状があるかどうかを調べる価値があります。

0
Peter D Jones

適切なサーバーのログパスを確認すると助けになりました... facepalm

0
mathieu

どのPHPスクリプトにアクセスしているか、およびアクセスするためにApacheがどのように構成されているかを確認してください。

一部の構成(仮想ホスト、特定のディレクトリなど)では、error_logファイルをデフォルトとは異なるパス/名前に設定できます。

次に、Apache構成ファイルを確認することをお勧めします。

0
Frosty Z