ホームページ >バックエンド開発 >PHPチュートリアル >PHPエラーログの共有
PHP 開発者にとって、製品が使用されたら、最初に行うことは、パス、データベース接続、データ テーブル、およびこれらのエラーによって公開されるその他の情報によるハッカーによる攻撃を避けるために、display_errors オプションをオフにすることです。
製品が使用されると、必然的にエラー メッセージが表示されます。開発者にとって非常に役立つこの情報をどのように記録すればよいでしょうか?
PHP の log_errors をオンにするだけで、デフォルトでは Apache の error.log ファイルなどの WEB サーバーのログ ファイルに記録されます。
もちろん、指定したファイルにエラーログを記録することもできます。
-------------------------------------------- -- ----------
PHP エラー ログ PHP 開発者の場合、製品が使用されたら、すぐに display_errors オプションをオフにして、パス、データベース接続、データ テーブルなどが公開されるのを避ける必要があります。これらのエラーは情報がハッキングされたものです。しかし、どのような製品でも使用後は必ずエラーが発生します。開発者に役立つエラー レポートを記録するにはどうすればよいでしょうか?エラーを別のテキスト ファイルに記録できます。エラー ログの記録は、開発者や管理者がシステムに問題があるかどうかを確認するのに役立ちます。 プログラム内のエラー レポートをエラー ログに書き込む必要がある場合は、PHP 設定ファイルで設定ディレクティブ log_errors を有効にするだけです。エラー レポートは、デフォルトで Web サーバーのログ ファイル (たとえば、Apache サーバーのエラー ログ ファイル error.log) に記録されます。もちろん、次のようにエラー ログを指定したファイルに記録したり、システムの syslog に送信したりすることもできます:
1. 指定したファイルを使用してエラー レポート ログを記録します
指定したファイルを使用してエラーを記録しますレポート ログ エラー レポート ログを記録するには、指定したファイルを使用します。 エラー レポート ログを記録するには、指定したファイルを使用します。 エラー ログを記録するために独自のファイルを使用する場合は、エラー ログが記録される可能性を減らすために、必ずこのファイルをドキュメント ルート ディレクトリの外に保存してください。攻撃されました。また、このファイルは、PHP スクリプトを実行するユーザー (Web サーバー プロセスの所有者) によって作成される必要があります。 Linux オペレーティング システムでは、/usr/local/ ディレクトリの error.log ファイルがエラー ログ ファイルとして使用され、Web サーバー プロセス ユーザーに書き込み権限が設定されているとします。次に、PHP 構成ファイルで、error_log ディレクティブの値をエラー ログ ファイルの絶対パスに設定します。
php.ini の設定手順を次のように変更する必要があります:
1. error_reporting = E_ALL; 発生したすべてのエラーが PHP に報告されます
2. 前の手順で定義されたルールを満たすすべてのエラーが報告されます。レポートは表示されません
3. log_errors = On ; ログ ステートメントの記録場所を決定します
4. 各ログ エントリの最大長を設定します
5. エラーを指定します。書き込むレポート ログファイルの場所
PHP設定ファイルを上記のように設定した後、Webサーバーを再起動します。このようにして、PHP スクリプト ファイルを実行するときに、生成されたすべてのエラー レポートはブラウザーには表示されませんが、指定したエラー ログ /usr/local/error.log に記録されます。さらに、error_reporting で定義されたルールを満たすすべてのエラーを記録できるだけでなく、PHP の error_log() 関数を使用してユーザー定義のエラー メッセージを送信することもできます。
この関数のプロトタイプは次のとおりです:
1. bool error_log ( string message [, int message_type [, string destination [, string extra_headers]] )
この関数は、エラー情報を Web サーバーのエラー ログ ファイルに送信します。特定の TCP サーバーまたは指定されたファイルに送信します。この関数は、成功した場合は TRUE を返し、失敗した場合は FALSE を返します。最初のパラメータ メッセージは必須であり、送信されるエラー メッセージです。このパラメータのみを使用した場合、メッセージは設定ファイル php.ini で設定された場所に送信されます。 2 番目のパラメータ message_type は整数値です。0 はメッセージをオペレーティング システムのログに送信することを意味し、1 は PHP の Mail() 関数を使用してメッセージを電子メール アドレスに送信することを意味し、4 番目のパラメータ extra_headers も使用されます。 2 は、エラー メッセージを TCP サーバーに送信することを意味します。このとき、3 番目のパラメーターの宛先は宛先 IP とポートを表します。 3. ファイルの宛先に情報を保存します。
Oracle データベースへのログインの問題を例にとると、この関数の使用方法は次のようになります:
1. <?php 2. if(!Ora_Logon($username, $password)){ 3. error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 4. } 5. if(!($foo=allocate_new_foo()){ 6. error_log("出现*烦了!", 1, ". mydomain.com"); //发送到管理员邮箱中 7. } 8. error_log("搞砸了!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 9. error_log("搞砸了!", 3, "/usr/local/errors.log"); //发送到指定的文件中 10. ?>
2、 错误信息记录到操作系统的日志里
错 误信息记录到操作系统的日志里错误信息记录到操作系统的日志里错误信息记录到操作系统的日志里 错误报告也可以被记录到操作系统日志里,但不同的操作系统之间的日志管理有点区别。在Linux上错误语句将送往syslog,而在Windows上错误 将发送到事件日志里。如果你不熟悉syslog,起码要知道它是基于UNIX的日志工具,它提供了一个API来记录与系统和应用程序执行有关的消息。 Windows事件日志实际上与UNIX的syslog相同,这些日志通常可以通过事件查看器来查看。如果希望将错误报告写到操作系统的日志里,可以在配 置文件中将error_log指令的值设置为syslog。
具体需要在php.ini中修改的配置指令如下所示:
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误
2. display_errors = Off ;不显示 满足上条指令所定义规则的所有错误报告
3. log_errors = On ;决定日志语句记录的位置
4. log_errors_max_len = 1024 ;设置每个日志项的最大长度
5. error_log = syslog ;指定产生的错误报告写入操作系统的日志里
除了一般的错误输出之外,PHP还允许向系统syslog中发送定制的消息。虽然通过前面介绍的error_log()函数,也可以向syslog中发送定制的消息,但在PHP中为这个特性提供了需要一起使用的4个专用函数。
分别介绍如下:
define_syslog_variables()
在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。
openlog()
打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。
syslog()
该 函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警 告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制 消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。
closelog()
该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。
如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息,如下所示:
1. 2. define_syslog_variables(); 3. openlog("PHP5", LOG_PID , LOG_USER); 4. syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s")); 5. closelog(); 6. ?>
相关推荐:
以上がPHPエラーログの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。