web-dev-qa-db-ja.com

php error_logが機能しない

これは1000回尋ねられ、これを投稿する前に別の投稿を閲覧しましたが、答えは見つかりませんでした。私がPHPでプログラミングしている限り、これは常に機能するための悪夢です。誰かが私がここで間違っていることを教えてもらえますか?

Error_logをerror_reporting = E_ALLとともにiniファイルに設定しました。 E_STRICT

他に何が欠けていますか?これは通常私にそれを与えました。これをスクリプトではなく、iniファイルに設定します。

もう1つ興味深いのは、スクリプトの1つで意図的にエラーをスローしようとすると、Apacheが何度も何度も再起動することです。


これは、1つのエラー後の私のイベントログです。タイムスタンプで戦利品

Wed Nov 04 19:34:23 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:23 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:23 2009] [notice] Parent: Created child process 1700
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Child process is running
[Wed Nov 04 19:34:23 2009] [notice] Child 3008: Released the start mutex
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Acquired the start mutex.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting 64 worker threads.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting thread to listen on port 80.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: All worker threads have exited.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: Child process is exiting
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:53 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:53 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:53 2009] [notice] Parent: Created child process 3656
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Child process is running
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Acquired the start mutex.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting 64 worker threads.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting thread to listen on port 80.
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 3980
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting thread to listen on port 80.
[Wed Nov 04 19:34:54 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 1600
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 1068
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Child process is running
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Acquired the start mutex.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting 64 worker threads.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 3220
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Child process is running
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Acquired the start mutex.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting 64 worker threads.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting thread to listen on port 80.
25
Jim

また、php.iniでlog_errors = Onを設定する必要があります。

10
chaos

他の誰かがローカル開発環境でエラーをログに記録するのに問題がある場合は、次の方法で修正しました。

Windowsでは、error_log()が機能するためには、error_logをログへの完全なパスに設定する必要があります(error_log = c:\Apache\php_errors.log)。ただし、error_log = php_errors.logにパスがない場合でも、phpは次のような起動エラーを記録できます。

PHP Startup: Unable to load dynamic library 'ext\php_mysqli.dll' - The specified module could not be found
9
Mel Reams

私が遭遇した問題は、指定したエラーログが書き込み保護されていることでした。私のすべての.htaccess設定は正しかった、PHPはアクセス許可がないため、エラーログに書き込むことができませんでした。

chmod 777 watermellon-app-errors.log

明らかに、.logを、ログに使用しているファイルに変更する必要があります。

7
Thomas Keene

PHP-FPMがerror_logを明示的に設定していないことを確認してください:

Error_logの/etc/php-fpm.d/www.conf設定がファイルphp_admin_valueに含まれていないことを確認してください。以下を検索し、セミコロンを使用してコメント化します。

; NOTE: If these are set, ini_set('error_log', 'path') will have no effect 
; inside your php code, and this will be forced to be the value always.
; php_admin_value[error_log] = /var/log/php-fpm/www-error.log
; php_admin_flag[log_errors] = on

次に、php-fpmを再起動します。

systemctl restart php-fpm

Apacheの.htaccessファイルがerror_log値を設定していないことを確認してください

Apache構成ファイルのphp_admin_value設定は上書きできないため、Apache構成ファイルのerror_log設定にphp_admin_valueがないことを確認してください。念のためphp_valueの設定も確認してください。

PHPウェブサイト-設定を変更する方法

6
Basil Musa

Error_logディレクティブが設定されている場合、ファイルはphpエラーの記録に使用されます。設定されていない場合、エラーはApacheログに記録されます。 http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-log をご覧ください。

Error_logファイルとそのディレクトリは、Apacheを実行しているユーザーが書き込み可能である必要があります。ファイルが作成されていない場合は、おそらく権限の問題が原因です。

なぜApacheがクラッシュするのかはよくわかりませんが、それは何らかのパーミッションの問題だと思います。

4
bradym

error_log()呼び出しが機能しない場合のトラブルシューティングガイドを次に示します。

  1. サーバーの設定を見て、デフォルトのエラーログファイルの場所を確認します。

    これは、使用しているサーバーによって異なります。はじめに、Apacheの ErrorLog option を使用している場合は、ApacheまたはNginxの _error_log_オプション を参照してください。 Nginxを使用しています。ファイルに設定されていることを確認してください。 Valetなどのツールを使用している場合は、裏でNginxなどのサーバーソフトウェアを使用していることに注意してください。

  2. サーバーのエラーログファイルの権限を確認してください。

    Unixライクなシステムでは、正しいユーザーとグループが書き込み可能である必要があり、親ディレクトリとそのすべての祖先の権限も正しくなければなりません。 chmodchownを使用します。

  3. PHP in the _.ini_ files)の設定を確認してください。

    具体的には、_log_errors = On_および_error_reporting = E_ALL | E_STRICT_および_error_log = /tmp/example/php_errors.log_を確認します( _log_errors__error_reporting_ および _error_log_ 構成設定)。 _.ini_ファイルを見つけるには、phpinfo();の出力を確認します。 _error_log_が設定されていない場合、デフォルトでは、前のステップで説明したサーバーのエラーログに記録されます。 _error_log_がファイルに設定されている場合、前の手順と同様に、ファイルはすでに存在し、書き込み可能である必要があります。構成を変更した後は、必ずサーバーを再起動してください。

  4. PHPの設定がサーバー構成によって変更されていないことを確認します。

    サーバーの構成(_.htaccess_でも)PHP構成設定を変更できます。Apacheでは、これは_php_admin_value_および_php_admin_flag_( docs )。たとえば、_.htaccess_ファイルに次の行がある可能性があります:_php_admin_flag[log_errors] = off_。構成を変更した後は、必ずサーバーを再起動してください。

    この時点で、内容<?php error_log("test");を使用してテストファイル_test.php_を作成し、サーバーを再起動して、ブラウザーでURLを開くと、testが表示されるはずです。エラーログ(サーバーのもの、または_error_log =_で指定されたもの)。しかし、読み続けてください。

  5. PHPの設定が実行時に変更されていないことを確認してください

    _log_errors_オプションは、実行時にini_set('log_errors', 1);を実行することで変更できます。また、他の構成オプション_error_reporting_および_error_log_も変更できます。また、実行時に構成を変更する特別な error_reporting() PHP function があることに注意してください。コードベースで_ini_set_または_error_reporting_の呼び出しWordPressは、_WP_DEBUG_の値に応じてこれらを実行します。

その他の注意事項:SELinuxで権限の問題が発生している可能性があります( この回答 を参照)。

2
Flimm

なぜかわかりませんが、エラーログは機能しています。これが私がしたことです。私はあきらめ、error_logディレクティブをコメントアウトして、iniファイルを閉じました。解析エラーでスクリプトを実行したところ、Apacheがまだクラッシュし、ログファイルにPHPエラーが表示されました。iniファイルでerror_logが有効になっておらず、スクリプトが異常であるためini_set()を使用していません。

誰かこの狂気の説明がありますか?また、Apacheはクラッシュしなくなりました。

1
Jim

私の場合、CentOS開発サーバーでは、完全なyum update/ var/log/httpのアクセス権が700に変更され、ユーザーが「root」に変更されたため、ユーザー「Apache」はそこに入力または書き込みできませんでした。既存のファイル/ var/log/httpd/error.logに書き込むことはできましたが、日付の付いたログファイルを使用しているため、新しいファイルを作成できませんでした。コマンドの発行

chown Apache /var/log/httpd

問題を解決しました。

1
Zoltan M

Fedoraを使用している場合、ファイルがphp.iniで指定されており、そのファイルを含むディレクトリにすべての権限が許可されている場合でも、SELinux(デフォルトで有効)により、Apache/httpdがログファイルにエラーを追加できなくなります。

/ var/log/messagesのシステムログファイルを見ると、これが発生しているかどうかを確認できます。

enter image description here

理想的なソリューションは、ログファイルへのアクセスを許可するようにSELinuxを設定することです。

より迅速な解決策は、SELINUXを無効に設定することにより、/ etc/selinux/configでSELinuxを無効にすることです。

変更を有効にするには、この後にシステムを再起動する必要があります。

1
Anthony

私のubuntu(Apache 2.4.7、PHP 5.5.9))での動作は次のとおりです。

コマンドラインスクリプト:

  • error_logの場合、log_errors = Onが指すパスにログを書き込みます。 /etc/php5/cli/php.iniの設定

apache経由のWebリクエスト:

  • log_errors = On/etc/php5/Apache2/php.ini)の場合、仮想ホストのErrorLog Apacheディレクティブが指すパスにエラーが追加されます。そのディレクティブが存在しない場合、php.ini error_logパスが使用されます。
  • log_errors = Offでない場合、ログはどこにも書き込まれません。

私が覚えている限りでは、ほとんどのLinuxスタックでほぼこのように機能しました

0
Elvis Ciotti

ブラディムが言ったように、Apacheユーザーのphpエラーログが置かれているディレクトリへの書き込み権限があるかどうかを確認します。書き込み権限を持つログファイルを作成しただけでは不十分な場合、dirにもそれらがあるはずです。

0

さらにデバッグする場合:phpinfo();

現在のerror_log設定は、仮想ホストがログを記録していないときに役立つ場合があることを示します。

その設定がphp.iniとvhostからオーバーライドされた後、ここに到達しました。結局、syslogにログを記録していました。

0
themullet

Error_log = "C:\ php\Log\error.log"も機能しませんでした。 PHPはあなたのためにそれを行うので、私にとっての解決策はerror.logを自分で作成してはいけないということでした。 PHPを参照してくださいメッセージボード Windows 2008サーバーでPHP 5.2を使用しています)

0
Cerveser

これは私にとってはトリックでした。

setsebool -P httpd_unified 1

これは、最初に試す以下の推奨方法です。

semanage fcontext -a -t httpd_sys_rw_content_t 'errorLogNameHere.error.log
restorecon -v 'errorLogNameHere.error.log'

この回答は、次のコマンドラインを実行したときのログに基づいています。

journalctl -xe 

私が実行していたシステムに関する詳細情報:PHP 7.0およびCentOS 7

明白かどうかはわかりませんが、問題はファイルを書き込むためのApacheの設定でした。ロギングディレクトリでchmod 777、chmod a + wを試しましたが、これはうまくいきませんでした。

これが誰かを助けることを願っています。

0
fungusanthrax