Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die PHP-Fehlerprüfung

Detaillierte Einführung in die PHP-Fehlerprüfung

黄舟
黄舟Original
2017-10-10 10:13:592213Durchsuche

Sobald ein Produkt in Betrieb genommen wird, sollte die Option display_errors für PHP-Entwickler sofort deaktiviert werden, um Hackerangriffen aufgrund der durch diese Fehler offengelegten Pfade, Datenbankverbindungen, Datentabellen und anderen Informationen vorzubeugen. 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 Fehlerberichte 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 den Fehlerbericht 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 entsprechenden Einführungen lauten wie folgt:

1. Verwenden Sie die angegebene Datei, um das Fehlerberichtsprotokoll aufzuzeichnen

Verwenden Sie die angegebene Datei, um das Fehlerberichtsprotokoll aufzuzeichnen. Verwenden Sie die angegebene Datei, um das Fehlerberichtsprotokoll aufzuzeichnen Stellen Sie sicher, dass Sie diese Datei außerhalb des Stammverzeichnisses des Dokuments speichern, um das Fehlerrisiko und 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.

Sie müssen die Konfigurationsanweisungen in php.ini wie folgt ändern:

1. error_reporting  =  E_ALL                   ;将会向PHP报告发生的每个错误   
2. display_errors = Off                        ;不显示满足上条 指令所定义规则的所有错误报告   
3. log_errors = On                             ;决定日志语句记录的位置   
4. log_errors_max_len = 1024                   ;设置每个日志项的最大长度   
5. error_log = /usr/local/error.log                ;指定产生的 错误报告写入的日志文件位置

Die PHP-Konfigurationsdatei ist wie oben festgelegt. Später und 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 die Fehlerprotokolldatei des Webservers, eines TCP-Servers oder an 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 verwendet die Mail()-Funktion von PHP, um die Nachricht an eine E-Mail-Adresse zu senden; 2 Send Die Fehlermeldung an den TCP-Server stellt zu diesem Zeitpunkt die Ziel-IP und den Port 3 dar. 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. Die Fehlerinformationen wird im Betriebssystemprotokoll aufgezeichnet

Fehlerinformationen werden im Betriebssystemprotokoll aufgezeichnet. Fehlerinformationen werden im Betriebssystemprotokoll aufgezeichnet können auch im Betriebssystemprotokoll aufgezeichnet werden. Es gibt jedoch einige Unterschiede in der Protokollverwaltung zwischen verschiedenen Betriebssystemen. Unter Linux werden Fehleranweisungen an Syslog gesendet, während unter Windows Fehler an das Ereignisprotokoll gesendet werden. Wenn Sie mit Syslog nicht vertraut sind, wissen Sie zumindest, dass es sich um ein UNIX-basiertes Protokollierungstool handelt, das eine API zum Aufzeichnen von Meldungen im Zusammenhang mit der System- und Anwendungsausführung bereitstellt. Das Windows-Ereignisprotokoll ist eigentlich dasselbe wie das UNIX-Syslog, und diese Protokolle können normalerweise über die Ereignisanzeige angezeigt werden. Wenn Sie Fehlerberichte in das Betriebssystemprotokoll schreiben möchten, können Sie den Wert der error_log-Direktive in der Konfigurationsdatei auf syslog setzen.

Die spezifischen Konfigurationsanweisungen, die in php.ini geändert werden müssen, lauten wie folgt:

1. error_reporting  =  E_ALL                   ;将会向PHP报告发生的每个错误   
2. display_errors = Off                            ;不显示 满足上条指令所定义规则的所有错误报告   
3. log_errors = On                             ;决定日志语句记录的位置   
4. log_errors_max_len = 1024                   ;设置每个日志项的最大长度   
5. error_log = syslog                          ;指定产生的错误报告写入操作系统的日志里

Neben der allgemeinen Fehlerausgabe ermöglicht PHP auch das Senden System-Syslog Senden Sie benutzerdefinierte Nachrichten. Obwohl benutzerdefinierte Nachrichten auch über die zuvor eingeführte Funktion error_log() an Syslog gesendet werden können, stellt PHP vier dedizierte Funktionen für diese Funktion bereit, die zusammen verwendet werden müssen.

werden wie folgt eingeführt:

define_syslog_variables()

Sie müssen diese Funktion aufrufen, bevor Sie die drei Funktionen openlog(), syslog und closelog( ) Funktion. Denn wenn diese Funktion aufgerufen wird, werden einige notwendige Konstanten für die folgenden drei Funktionen basierend auf der aktuellen Systemumgebung initialisiert.

openlog()

Öffnen Sie eine Verbindung zum Logger im aktuellen System, um das Einfügen von Protokollnachrichten in das System vorzubereiten. Und fügen Sie den bereitgestellten ersten Zeichenfolgenparameter in jede Protokollnachricht ein. Diese Funktion muss auch zwei Parameter angeben, die im Protokollkontext verwendet werden.

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

 以Windows系统为例,通过右击"我的电脑"选择管理选项,然后到系统工具菜单中,选择事件查看器,再找到应用程序选项,就可以看到我们自己定制的警告消息了。上面这段代码将在系统的syslog文件中,生成类似下面的一条信息,是事件的一部分: 

      1. PHP5[3084], 警告报告向syslog中发送的演示, 警告时间:2009/03/26 04:09:11.  

使 用指定的文件还是使用syslog记录错误日志,取决于你所在的Web服务器环境。如果你可以控制Web服务器,使用syslog是最理想的,因为你能利 用syslog的解析工具来查看和分析日志。但如果你的网站在共享服务器的虚拟主机中运行,就只有使用单独的文本文件记录错误日志了。

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die PHP-Fehlerprüfung. 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