Heim  >  Artikel  >  Backend-Entwicklung  >  Freigabe der PHP-Fehlerprotokollierung

Freigabe der PHP-Fehlerprotokollierung

小云云
小云云Original
2018-05-23 17:01:121791Durchsuche

Sobald ein Produkt in Betrieb genommen wird, müssen PHP-Entwickler zunächst die Option display_errors deaktivieren, um Angriffe von Hackern aufgrund der durch diese Fehler offengelegten Pfade, Datenbankverbindungen, Datentabellen und anderen Informationen zu vermeiden.
Nachdem ein Produkt in Betrieb genommen wurde, treten zwangsläufig Fehlermeldungen auf. Wie kann man also diese Informationen aufzeichnen, die für Entwickler sehr nützlich sind?
Aktivieren Sie einfach PHPs log_errors. Standardmäßig wird es in der Protokolldatei des WEB-Servers aufgezeichnet, z. B. in der Datei error.log von Apache.
Natürlich können Fehlerprotokolle auch in bestimmten Dateien aufgezeichnet werden.

# vim /etc/php.ini
display_errors = Off
log_errors = On
error_log = /var/log/php-error.log
另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。

---------------------------------------------------- --- -------------------
PHP-Fehlerprotokoll Für PHP-Entwickler sollte die Option display_errors sofort deaktiviert werden, sobald ein Produkt in Gebrauch genommen wird, um dies zu vermeiden Von diesen Fehlern betroffen waren die offengelegten Pfade, Datenbankverbindungen, Datentabellen und andere Informationen. Allerdings treten nach der Inbetriebnahme eines Produkts zwangsläufig Fehler auf. Wie kann man also einige Fehlerberichte aufzeichnen, die für Entwickler nützlich sind? Wir können Fehler in separaten Textdateien protokollieren. Die Aufzeichnung von Fehlerprotokollen kann Entwicklern oder Managern dabei helfen, zu überprüfen, ob es Probleme mit dem System gibt. Wenn Sie Fehlerberichte im Programm in das Fehlerprotokoll schreiben müssen, aktivieren Sie einfach die Konfigurationsanweisung log_errors in der PHP-Konfigurationsdatei. Fehlerberichte werden standardmäßig in der Protokolldatei des Webservers protokolliert, beispielsweise in der Fehlerprotokolldatei error.log des Apache-Servers. Natürlich können Sie das Fehlerprotokoll auch in einer angegebenen Datei aufzeichnen oder an das System-Syslog senden. Die Details lauten wie folgt:
1 Verwenden Sie die angegebene Datei, um das Fehlerberichtsprotokoll aufzuzeichnen.
Verwenden Sie die angegebene Datei Zum Aufzeichnen des Fehlerberichtsprotokolls die angegebene Datei verwenden. Das Fehlerberichtsprotokoll verwendet eine angegebene Datei zum Aufzeichnen des Fehlerberichtsprotokolls. Speichern Sie diese Datei unbedingt außerhalb des Dokumentstammverzeichnisses, um die Möglichkeit eines Angriffs zu verringern. Und die Datei muss von dem Benutzer geschrieben werden, der das PHP-Skript ausführt (dem Eigentümer des Webserverprozesses). Nehmen Sie an, dass im Linux-Betriebssystem die Datei error.log im Verzeichnis /usr/local/ als Fehlerprotokolldatei verwendet wird und der Webserver-Prozessbenutzer über Schreibberechtigungen verfügt. Setzen Sie dann in der PHP-Konfigurationsdatei den Wert der error_log-Direktive auf den absoluten Pfad der Fehlerprotokolldatei.
Die Konfigurationsanweisungen in php.ini müssen wie folgt geändert werden:
1. Jeder Fehler, der auftritt, wird an PHP gemeldet.
2. Die obigen Anweisungen werden nicht angezeigt Alle Fehlerberichte für definierte Regeln
3. Bestimmen Sie den Speicherort der Protokollanweisung
4; Legen Sie die maximale Länge jedes Protokolleintrags fest
5 /error.log ;Geben Sie den Speicherort der Protokolldatei an, in die der generierte Fehlerbericht geschrieben wird
Nachdem die PHP-Konfigurationsdatei wie oben festgelegt wurde, starten Sie den Webserver neu. Auf diese Weise werden beim Ausführen einer beliebigen PHP-Skriptdatei alle generierten Fehlerberichte nicht im Browser angezeigt, sondern im von Ihnen angegebenen Fehlerprotokoll /usr/local/error.log aufgezeichnet. Darüber hinaus können nicht nur alle Fehler, die den durch error_reporting definierten Regeln entsprechen, aufgezeichnet werden, sondern auch eine benutzerdefinierte Fehlermeldung über die Funktion error_log() in PHP versendet werden.
Der Prototyp dieser Funktion lautet wie folgt:
1. bool error_log ( string message [, int message_type [, string destination [, string extra_headers]] )
Diese Funktion sendet Fehlerinformationen an den Webserver Fehlerprotokolldatei, ein TCP-Server oder eine angegebene Datei. Diese Funktion gibt TRUE zurück, wenn sie erfolgreich ist, und FALSE, wenn sie fehlschlägt. Die erste Parameternachricht ist erforderlich, bei der es sich um die zu sendende Fehlermeldung handelt. Wenn nur dieser Parameter verwendet wird, wird die Nachricht an den in der Konfigurationsdatei php.ini festgelegten Ort gesendet. Der zweite Parameter message_type ist ein ganzzahliger Wert: 0 bedeutet, dass er an das Protokoll des Betriebssystems gesendet wird; 1 bedeutet, dass die Mail()-Funktion von PHP verwendet wird, um die Nachricht an eine E-Mail-Adresse zu senden, und der vierte Parameter extra_headers wird ebenfalls verwendet; 2 bedeutet, dass die Fehlermeldung an den TCP-Server gesendet wird. Zu diesem Zeitpunkt stellt der dritte Parameter Ziel die Ziel-IP und den Port dar. 3. Speichern Sie die Informationen im Dateiziel.
Wenn wir das Problem der Anmeldung bei der Oracle-Datenbank als Beispiel nehmen, ist die Verwendung dieser Funktion wie folgt:

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. ?>

相关推荐:

nginx php-fpm 输出php错误日志的配置方法

记录PHP错误日志 display

详解PHP错误日志的获取方法_PHP

Das obige ist der detaillierte Inhalt vonFreigabe der PHP-Fehlerprotokollierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn