Heim > Backend-Entwicklung > PHP-Tutorial > Zusammenfassung der Verwendung verschiedener Methoden zum Protokollieren von Fehlerberichten

Zusammenfassung der Verwendung verschiedener Methoden zum Protokollieren von Fehlerberichten

WBOY
Freigeben: 2023-04-10 19:06:01
Original
3624 Leute haben es durchsucht

Im vorherigen Artikel habe ich Ihnen „Erklären Sie die Fehlertypen und Fehlerstufen von PHP“ vorgestellt, in dem die Fehlertypen und Fehlerstufen in PHP ausführlich vorgestellt wurden. In diesem Artikel werfen wir einen Blick auf den Fehler Typen und Fehlerstufen in PHP. So konfigurieren und verwenden Sie Fehlerprotokolle. Hoffe, es hilft allen!

Zusammenfassung der Verwendung verschiedener Methoden zum Protokollieren von Fehlerberichten

In unserem vorherigen Artikel haben wir die Ausnahmebehandlung, Fehlertypen und Fehlerstufen von PHP-Fehlern vorgestellt. Als nächstes stellen wir die Konfiguration und Verwendung von Fehlerprotokollen in PHP vor. Sobald ein Projekt in Betrieb genommen wird, sollte PHP-Entwickler die Option display_errors in der Konfigurationsdatei php.ini sofort deaktivieren, um zu vermeiden, dass dadurch Pfad, Datenbankverbindung, Datentabelle und andere Informationen preisgegeben werden Fehler.

display_errors 选项关闭,以免因为这些错误而透露路径、数据库连接、数据表等信息。

再投入使用的任何一个项目中,不可避免的会有错误的出现,有些错误报告对开发者是有用的,这时候我们可以通过单独的文本文件来进行错误报告的日志记录。这样的话,开发人员可以更轻松的进行查看系统是否存在问题。将PHP配置文件中的 log_errors 开启的话,就可以将程序中的错误报告写进错误日志中了。

其中这份错误报告会自动记录到服务器的日志文件中,想要发送到系统的syslog中,也就是系统日志中,也是可以的。接下来我们就一起来看一下怎样去实现这样错误处理的方法吧。

通过指定文件记录错误报告

想要实现使用目标文件来记录错误报告日志,其中重要的是需要让这个制定的文件的位置在文档根目录外面,这样的话受到攻击的可能性较低,而且这个指定文件需要拥有一定的权限,首先我们先来看一下我们需要针对php.ini的配置指令做出怎样的修改:

  • <strong>log_errors = On</strong> ;决定日志语句记录的位置

  • <strong>log_errors_max_len = 1024</strong> ;设置每个日志项的最大长度

  • <strong>error_reporting = E_ALL</strong> ;将会向PHP报告发生的每个错误

  • <strong>display_errors = Off</strong> ;不显示满足上条 指令所定义规则的所有错误报告

  • <strong>error_log = /usr/local/error.log</strong> ;指定产生的 错误报告写入的日志文件位置

按照上述的方式修改php.ini文件后,成功设置之后,在运行PHP的脚本文件的时候,就不会在浏览器中有显示错误报告了,这时候错误报告就都显示在这个我们设置的目标文件中,也就是错误日志中了。

另外还需要注意的是,这个目标文件中可以记录error_reporting定义的错误也可以通过 error_log() 函数将错误信息放到服务器中的错误日志或者这个目标文件中。

error_log() 函数的语法格式如下:

error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool
Nach dem Login kopieren

其中需要注意的是:

$message表示需要记录的错误信息;$destination表示目标,也就是错误消息被发送到的目的地。它的含义描述于以上,由 $message_type 参数所决定;$extra_headers表示额外的头。当 $message_type 设置为 1 的时候使用。 该信息类型使用了 mail() 的同一个内置函数。

$message_type表示设置错误应该发送到何处。可能的信息类型有以下几个:

  • 0:(默认值)将 $message 发送到 PHP 的系统日志,使用操作系统的日志机制或者一个文件,取决于配置文件中 error_log 设置了什么;

  • 1:将 $message 发送到参数 $destination 设置的邮件地址。 第四个参数 $extra_headers 只有在这个类型里才会被用到;(2已经被弃用了)

  • 3$message 被发送到位置为 $destination 的文件里。字符 $message 不会默认被当做新的一行;

  • 4:将 $message In jedem Projekt, das in Betrieb genommen wird, treten zwangsläufig Fehler auf. Einige Fehlerberichte sind für Entwickler nützlich. Zu diesem Zeitpunkt können wir die Fehlerberichte über separate Textdateien protokollieren. Auf diese Weise können Entwickler einfacher überprüfen, ob es Probleme mit dem System gibt. Wenn Sie log_errors in der PHP-Konfigurationsdatei aktivieren, können Sie Fehlerberichte im Programm in das Fehlerprotokoll schreiben.

  • Dieser Fehlerbericht wird automatisch in der Protokolldatei des Servers aufgezeichnet. Sie können ihn auch an das Systemprotokoll syslog senden. Schauen wir uns als Nächstes an, wie eine solche Fehlerbehandlung implementiert wird.

Fehlerberichte durch Angabe von Dateien aufzeichnen

Sie möchten Zieldateien zum Aufzeichnen von Fehlern verwenden Im Berichtsprotokoll ist es am wichtigsten, dass sich der Speicherort der angegebenen Datei außerhalb des Dokumentstammverzeichnisses befindet. In diesem Fall ist die Wahrscheinlichkeit eines Angriffs gering und die angegebene Datei muss über bestimmte Berechtigungen verfügen Schauen Sie sich an, was wir brauchen. Welche Änderungen an den Konfigurationsanweisungen von php.ini vorgenommen werden sollten:

  • 🎜<strong> log_errors = On</strong> ;Bestimmen Sie den Ort der Protokollanweisungsaufzeichnung🎜🎜
  • 🎜<strong>log_errors_max_len = 1024</strong> ; Legen Sie die maximale Länge jedes Protokolleintrags fest 🎜🎜
  • 🎜<strong>error_reporting = E_ALL</strong> ;Jeder Fehler, der auftritt, wird an PHP gemeldet🎜🎜
  • 🎜 <strong>display_errors = Off< /strong> ;Zeigen Sie nicht alle Fehlerberichte an, die den im vorherigen Befehl definierten Regeln entsprechen🎜🎜
  • 🎜<strong>error_log = /usr/local/error.log </strong> ;Geben Sie den Speicherort der Protokolldatei an, in die der generierte Fehlerbericht geschrieben wird🎜🎜🎜🎜Nach erfolgreicher Änderung der php.ini-Datei auf die oben beschriebene Weise Wenn Sie die PHP-Skriptdatei ausführen, wird der Fehlerbericht nicht im Browser angezeigt. Zu diesem Zeitpunkt wird der Fehlerbericht in der von uns festgelegten Zieldatei angezeigt, bei der es sich um das Fehlerprotokoll handelt.
    🎜🎜Darüber hinaus ist zu beachten, dass durch error_reporting definierte Fehler in dieser Zieldatei aufgezeichnet werden können und Fehlerinformationen über error_log() auf dem Server abgelegt werden können. -Funktion im Fehlerprotokoll oder in dieser Zieldatei.
    🎜🎜error_log() Das Syntaxformat der Funktion ist wie folgt:
    🎜
    <?php
        $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
        if (!$link) {
            error_log(&#39;Mysql 数据库连接失败!&#39;,0);
            exit();
        }
    ?>
    Nach dem Login kopieren
    🎜Was beachtet werden muss, ist:
    🎜🎜$ message Gibt die Fehlerinformationen an, die aufgezeichnet werden müssen; $destination gibt das Ziel an, an das die Fehlermeldung gesendet wird. Seine Bedeutung ist oben beschrieben und wird durch den Parameter $message_type bestimmt; $extra_headers steht für zusätzliche Header. Wird verwendet, wenn $message_type auf 1 gesetzt ist. Dieser Nachrichtentyp verwendet dieselbe integrierte Funktion wie mail(). 🎜🎜$message_type gibt an, wohin Einstellungsfehler gesendet werden sollen. Mögliche Nachrichtentypen sind: 🎜
    • 🎜0: (Standard) ist $message code> Das an PHP gesendete Systemprotokoll verwendet den Protokollierungsmechanismus des Betriebssystems oder eine Datei, je nachdem, welches Fehlerprotokoll in der Konfigurationsdatei festgelegt ist 🎜🎜
    • 🎜1: Ändern Sie $message </; Code> An die E-Mail-Adresse senden, die durch den Parameter $destination festgelegt wurde. Der vierte Parameter $extra_headers wird nur in diesem Typ verwendet (2 ist veraltet) 🎜🎜<li>🎜<code>3: $message wird an die Datei unter $ gesendet Ziel. Das Zeichen $message wird standardmäßig nicht als neue Zeile behandelt; 🎜🎜
    • 🎜4: Senden Sie $message direkt an den SAPI-Protokollhandler. 🎜🎜🎜🎜 Schauen wir uns als Nächstes die Anmeldung bei der MySQL-Datenbank anhand eines Beispiels an. Wenn die Anmeldung fehlschlägt, werden Fehlerinformationen aufgezeichnet. Ein Beispiel lautet 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"); //发送到指定的文件中
      ?>
      Nach dem Login kopieren
      Nach dem Login kopieren
      🎜 Wenn wir das Problem der Anmeldung bei der Oracle-Datenbank als Beispiel nehmen, lautet das Anwendungsbeispiel 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"); //发送到指定的文件中
      ?>
      Nach dem Login kopieren
      Nach dem Login kopieren

      代码运行之后就会在php.ini 配置文件中 error_log 一项所设置的目录中生成对应的错误日志文件。接下来我们看一下错误信息记录到操作系统的日志里是什么情况。

      通过系统日志记录错误报告

      上文中我们讲到了将使用目标文件来记录错误报告日志,接下来我们就来看一下将错误信息放到操作系统的日志里面,这是可以实现的,其中不同的操作系统,它们的日志管理也是不一样的,下面我们都是使用常见的windows举例,Windows 上错误将发送到事件日志里,可以通过事件查看器来查看。

      通过什么样的方法才能够在操作系统的日志里有错误信息呢?这时候我们可以通过php.ini 配置文件中 error_log,接下来我们看一下应该怎样修改php.ini中的配置文件。

      修改error_reporting = E_ALL用来报告所发生的每个错误;修改display_errors = Off 用来不显示满足上条指令所定义规则的所有错误报告;修改log_errors = On用于决定日志语句记录的位置;修改log_errors_max_len = 1024用于设置每个日志项的最大长度;修改error_log = syslog用于指定产生的错误报告写入操作系统的日志里 。

      虽然通过前面介绍的 error_log() 函数,可以向 syslog 中发送定制的消息,想要实现将错误信息放到操作系统的日志里面,我们还需要三个函数的帮助,下面我们就来简单的介绍一下:

      • <strong>openlog()</strong>函数

      该函数是用来打开连接的,用于向系统中写入日志信息做的准备。并且每个日志的消息中都有它的一个参数是字符串形式的。

      • <strong>syslog()</strong>函数

      该函数拥有两个参数,它的作用是用来给系统中的日志给一个特定消息,第一个参数就是用来设置这个消息的优先级,第二个参数即使提供字符串,这个字符串就是这个特定的消息。

      • <strong>closelog()</strong>函数

      该函数就是用来关闭连接的,这个连接就是上文中openlog() 函数打开的。

      那么接下来我们通过示例来看一下实际操作吧,示例如下:

      <?php
          openlog("PHP中文网", LOG_PID, LOG_USER);
          syslog(LOG_WARNING, "向 syslog 中发送定时消息,发送时间:".date("Y/m/d H:i:s"));
          closelog();
      ?>
      Nach dem Login kopieren

      以windows系统为例,打开“此电脑”右键选择“管理”选项,进入计算机管理界面,找到图示中应用程序的选项,就能够看到我们自己定制的警告信息了。如下所示:

      Zusammenfassung der Verwendung verschiedener Methoden zum Protokollieren von Fehlerberichten

      Zusammenfassung der Verwendung verschiedener Methoden zum Protokollieren von Fehlerberichten

      其中我们需要注意的是:

      你所使用的Web服务器环境决定了是使用指定文件还是使用syslog记录错误日志。可以控制服务器的话就可以利用解析工具来查看和分析日志,推荐使用syslog 激励错误日志,网站在共享服务器的虚拟主机中运行,推荐使用单独的文本文件记录错误日志了。

      大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

      Das obige ist der detaillierte Inhalt vonZusammenfassung der Verwendung verschiedener Methoden zum Protokollieren von Fehlerberichten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage