これは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.
また、php.iniでlog_errors = On
を設定する必要があります。
他の誰かがローカル開発環境でエラーをログに記録するのに問題がある場合は、次の方法で修正しました。
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
私が遭遇した問題は、指定したエラーログが書き込み保護されていることでした。私のすべての.htaccess設定は正しかった、PHPはアクセス許可がないため、エラーログに書き込むことができませんでした。
chmod 777 watermellon-app-errors.log
明らかに、.logを、ログに使用しているファイルに変更する必要があります。
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
error_log
値を設定していないことを確認してくださいApache構成ファイルのphp_admin_value
設定は上書きできないため、Apache構成ファイルのerror_log
設定にphp_admin_valueがないことを確認してください。念のためphp_value
の設定も確認してください。
Error_logディレクティブが設定されている場合、ファイルはphpエラーの記録に使用されます。設定されていない場合、エラーはApacheログに記録されます。 http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-log をご覧ください。
Error_logファイルとそのディレクトリは、Apacheを実行しているユーザーが書き込み可能である必要があります。ファイルが作成されていない場合は、おそらく権限の問題が原因です。
なぜApacheがクラッシュするのかはよくわかりませんが、それは何らかのパーミッションの問題だと思います。
error_log()
呼び出しが機能しない場合のトラブルシューティングガイドを次に示します。
サーバーの設定を見て、デフォルトのエラーログファイルの場所を確認します。
これは、使用しているサーバーによって異なります。はじめに、Apacheの ErrorLog
option を使用している場合は、ApacheまたはNginxの _error_log
_オプション を参照してください。 Nginxを使用しています。ファイルに設定されていることを確認してください。 Valetなどのツールを使用している場合は、裏でNginxなどのサーバーソフトウェアを使用していることに注意してください。
サーバーのエラーログファイルの権限を確認してください。
Unixライクなシステムでは、正しいユーザーとグループが書き込み可能である必要があり、親ディレクトリとそのすべての祖先の権限も正しくなければなりません。 chmod
とchown
を使用します。
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
_がファイルに設定されている場合、前の手順と同様に、ファイルはすでに存在し、書き込み可能である必要があります。構成を変更した後は、必ずサーバーを再起動してください。
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 =
_で指定されたもの)。しかし、読み続けてください。
PHPの設定が実行時に変更されていないことを確認してください。
_log_errors
_オプションは、実行時にini_set('log_errors', 1);
を実行することで変更できます。また、他の構成オプション_error_reporting
_および_error_log
_も変更できます。また、実行時に構成を変更する特別な error_reporting()
PHP function があることに注意してください。コードベースで_ini_set
_または_error_reporting
_の呼び出しWordPressは、_WP_DEBUG
_の値に応じてこれらを実行します。
その他の注意事項:SELinuxで権限の問題が発生している可能性があります( この回答 を参照)。
なぜかわかりませんが、エラーログは機能しています。これが私がしたことです。私はあきらめ、error_logディレクティブをコメントアウトして、iniファイルを閉じました。解析エラーでスクリプトを実行したところ、Apacheがまだクラッシュし、ログファイルにPHPエラーが表示されました。iniファイルでerror_logが有効になっておらず、スクリプトが異常であるためini_set()を使用していません。
誰かこの狂気の説明がありますか?また、Apacheはクラッシュしなくなりました。
私の場合、CentOS開発サーバーでは、完全なyum update
/ var/log/httpのアクセス権が700に変更され、ユーザーが「root」に変更されたため、ユーザー「Apache」はそこに入力または書き込みできませんでした。既存のファイル/ var/log/httpd/error.logに書き込むことはできましたが、日付の付いたログファイルを使用しているため、新しいファイルを作成できませんでした。コマンドの発行
chown Apache /var/log/httpd
問題を解決しました。
Fedoraを使用している場合、ファイルがphp.iniで指定されており、そのファイルを含むディレクトリにすべての権限が許可されている場合でも、SELinux(デフォルトで有効)により、Apache/httpdがログファイルにエラーを追加できなくなります。
/ var/log/messagesのシステムログファイルを見ると、これが発生しているかどうかを確認できます。
理想的なソリューションは、ログファイルへのアクセスを許可するようにSELinuxを設定することです。
より迅速な解決策は、SELINUXを無効に設定することにより、/ etc/selinux/configでSELinuxを無効にすることです。
変更を有効にするには、この後にシステムを再起動する必要があります。
私の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スタックでほぼこのように機能しました
ブラディムが言ったように、Apacheユーザーのphpエラーログが置かれているディレクトリへの書き込み権限があるかどうかを確認します。書き込み権限を持つログファイルを作成しただけでは不十分な場合、dirにもそれらがあるはずです。
さらにデバッグする場合:phpinfo();
現在のerror_log設定は、仮想ホストがログを記録していないときに役立つ場合があることを示します。
その設定がphp.iniとvhostからオーバーライドされた後、ここに到達しました。結局、syslogにログを記録していました。
Error_log = "C:\ php\Log\error.log"も機能しませんでした。 PHPはあなたのためにそれを行うので、私にとっての解決策はerror.logを自分で作成してはいけないということでした。 PHPを参照してくださいメッセージボード Windows 2008サーバーでPHP 5.2を使用しています)
これは私にとってはトリックでした。
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を試しましたが、これはうまくいきませんでした。
これが誰かを助けることを願っています。