Heim  >  Artikel  >  Backend-Entwicklung  >  So protokollieren Sie PHP-Fehler

So protokollieren Sie PHP-Fehler

coldplay.xixi
coldplay.xixiOriginal
2020-08-14 15:39:103543Durchsuche

So zeichnen Sie PHP-Fehlerprotokolle auf: Legen Sie zunächst die PHP-Konfigurationsdatei fest. Verwenden Sie dann die angegebene Datei, um das Fehlerberichtsprotokoll aufzuzeichnen. Anschließend werden die Fehlerinformationen im Protokoll des Betriebssystems aufgezeichnet.

So protokollieren Sie PHP-Fehler

So zeichnen Sie PHP-Fehlerprotokolle auf:

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

Wenn Sie Ihre eigene angegebene Datei zum Aufzeichnen des Fehlerprotokolls verwenden, speichern Sie diese unbedingt Speichern Sie diese Datei im Dokument außerhalb des Stammverzeichnisses, um die Möglichkeit eines Angriffs zu verringern.

Und die Datei muss von dem Benutzer geschrieben werden, der das PHP-Skript ausführt (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.

Verwandte Lernempfehlungen: php-Programmierung (Video)

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

  • error_reporting = E_ALL ; Jeder auftretende Fehler wird an PHP gemeldet

  • display_errors = Aus ;Zeigen Sie nicht alle Fehlerberichte an, die den im vorherigen Befehl definierten Regeln entsprechen

  • log_errors = Ein ;Bestimmen Sie den Speicherort der Protokollanweisungsaufzeichnung

  • log_errors_max_len = 1024 ;Legen Sie die maximale Länge fest Jeder Protokolleintrag

  • error_log = /usr/local/error.log ; Geben Sie den Speicherort der Protokolldatei an, in die der generierte Fehlerbericht geschrieben wird

Nachdem die PHP-Konfigurationsdatei wie oben festgelegt wurde, 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:

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 und ist die zu sendende Fehlermeldung. 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. Außerdem wird der vierte Parameter extra_headers verwendet. 2 bedeutet, dass die Fehlerinformationen an den TCP-Server gesendet werden. 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:

<?php 
if(!Ora_Logon($username, $password)){ 
error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 
 } 
if(!($foo=allocate_new_foo()){ 
 error_log("出现大麻烦了!", 1, ". mydomain.com"); //发送到管理员邮箱中 
 } 
error_log("搞砸了!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 
error_log("搞砸了!", 3, "/usr/local/errors.log"); //发送到指定的文件中 
?>

2 Fehlerinformationen werden im Betriebssystemprotokoll aufgezeichnet. Es können auch Fehlerberichte aufgezeichnet werden im Betriebssystemprotokoll, 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 Protokollieren von Meldungen im Zusammenhang mit der System- und Anwendungsausführung bereitstellt. Windows-Ereignisprotokolle sind tatsächlich mit dem Syslog von UNIX identisch und 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:

error_reporting = E_ALL ; Jeder auftretende Fehler wird an PHP gemeldet
  • display_errors = Aus ; Nicht anzeigen, wenn der vorherige Anweisung wird erfüllt Alle Fehlerberichte für die definierten Regeln
  • log_errors = Ein ; Bestimmen Sie den Speicherort der Protokollanweisungsaufzeichnung
  • log_errors_max_len = 1024 ; Legen Sie die maximale Länge jedes Protokolleintrags fest
  • error_log = syslog ; Geben Sie den generierten Fehlerbericht an. Schreiben Sie in das Betriebssystemprotokoll
  • Neben der allgemeinen Fehlerausgabe ermöglicht PHP auch das Senden benutzerdefinierter Meldungen an das System-Syslog. 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.
Die jeweiligen Einführungen lauten wie folgt:

define_syslog_variables()

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

define_syslog_variables() 

在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。 

openlog() openlog()

打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。 

syslog()

该 函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警 告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制 消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。 

closelog()

该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。 

 

如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息,如下所示: 

define_syslog_variables(); 
openlog("PHP5", LOG_PID , LOG_USER); 
 syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s")); 
 closelog(); 
 ?>

相关学习推荐:编程视频

Das obige ist der detaillierte Inhalt vonSo protokollieren Sie PHP-Fehler. 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