Maison  >  Article  >  développement back-end  >  Résumé de l'utilisation de différentes méthodes pour enregistrer les rapports d'erreurs

Résumé de l'utilisation de différentes méthodes pour enregistrer les rapports d'erreurs

WBOY
WBOYoriginal
2021-11-01 17:30:513612parcourir

Dans l'article précédent, je vous ai présenté "Vous faire comprendre les types d'erreur et les niveaux d'erreur de PHP", qui présentait en détail les types d'erreur et les niveaux d'erreur en PHP. Dans cet article, examinons l'erreur. types et niveaux d'erreur en PHP. Comment configurer et utiliser les journaux d'erreurs. J'espère que cela aidera tout le monde !

Résumé de l'utilisation de différentes méthodes pour enregistrer les rapports d'erreurs

Dans notre article précédent, nous avons présenté la gestion des exceptions, les types d'erreurs et les niveaux d'erreur des erreurs PHP. Ensuite, nous présenterons la configuration et l'utilisation des journaux d'erreurs en PHP. Pour les développeurs PHP, une fois qu'un projet est utilisé, l'option display_errors dans le fichier de configuration php.ini doit être désactivée immédiatement pour éviter de révéler le chemin, la connexion à la base de données, la table de données et d'autres informations dues à ceux-ci. erreurs. 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

其中需要注意的是:

$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

    Dans tout projet mis en service, des erreurs se produiront inévitablement. Certains rapports d'erreurs sont utiles aux développeurs. À l'heure actuelle, nous pouvons enregistrer les rapports d'erreurs via des fichiers texte séparés. De cette façon, les développeurs peuvent vérifier plus facilement s’il existe des problèmes avec le système. Si vous activez log_errors dans le fichier de configuration PHP, vous pouvez écrire des rapports d'erreurs dans le programme dans le journal des erreurs.
Ce rapport d'erreur sera automatiquement enregistré dans le fichier journal du serveur. Vous pouvez également l'envoyer au syslog du système, c'est-à-dire le journal système. Voyons ensuite comment implémenter une telle gestion des erreurs.

Enregistrez les rapports d'erreur en spécifiant les fichiers

Vous souhaitez utiliser des fichiers cibles pour enregistrer l'erreur journal du rapport, la chose importante est que l'emplacement du fichier spécifié doit être en dehors du répertoire racine du document, de sorte que le risque d'attaque soit faible, et le fichier spécifié doit avoir certaines autorisations, jetons d'abord un coup d'œil à ce que nous avons besoin Quelles modifications doivent être apportées aux instructions de configuration de php.ini :
🎜
  • 🎜 <strong> log_errors = On</strong> ; Déterminer l'emplacement de l'enregistrement de la déclaration de journal🎜🎜
  • 🎜<strong>log_errors_max_len = 1024</strong> ; Définir la longueur maximale de chaque entrée de journal 🎜🎜
  • 🎜<strong>error_reporting = E_ALL</strong> ; Chaque erreur qui se produit sera signalée à PHP🎜🎜
  • 🎜<strong>display_errors = Désactivé</strong> ;Ne pas afficher tous les rapports d'erreurs qui répondent aux règles définies dans la commande précédente🎜🎜
  • 🎜<strong>error_log = /usr/ local/error.log </strong> ;Spécifiez l'emplacement du fichier journal où le rapport d'erreur généré est écrit🎜🎜🎜🎜Après avoir modifié le fichier php.ini de la manière ci-dessus, après un paramétrage réussi, lors de l'exécution le fichier de script PHP, ce ne sera pas le cas. Le rapport d'erreur sera affiché dans le navigateur. À ce moment, le rapport d'erreur sera affiché dans le fichier cible que nous avons défini, qui est le journal des erreurs.
    🎜🎜De plus, il convient de noter que les erreurs définies par error_reporting peuvent être enregistrées dans ce fichier cible, et les informations sur les erreurs peuvent être placées sur le serveur via error_log() dans le journal des erreurs ou dans ce fichier cible.
    🎜🎜error_log() Le format de syntaxe de la fonction est le suivant :
    🎜
    <?php
        $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
        if (!$link) {
            error_log(&#39;Mysql 数据库连接失败!&#39;,0);
            exit();
        }
    ?>
    🎜Ce qu'il faut noter est :
    🎜🎜$ message Indique les informations d'erreur qui doivent être enregistrées ; $destination indique la destination, qui est la destination à laquelle le message d'erreur est envoyé. Sa signification est décrite ci-dessus et est déterminée par le paramètre $message_type ; $extra_headers représente des en-têtes supplémentaires. Utilisé lorsque $message_type est défini sur 1. Ce type de message utilise la même fonction intégrée de mail(). 🎜🎜$message_type indique où les erreurs de configuration doivent être envoyées. Les types de messages possibles sont : 🎜
    • 🎜0 : (par défaut) sera $message code> Le journal système envoyé à PHP utilise le mécanisme de journalisation du système d'exploitation ou un fichier, selon le error_log défini dans le fichier de configuration ; 🎜🎜
    • 🎜1 : modifiez $message  ; code> Envoyer à l'adresse email définie par le paramètre $destination. Le quatrième paramètre $extra_headers ne sera utilisé que dans ce type ; (2 est obsolète) 🎜🎜<li>🎜<code>3 : $message est Envoyer au fichier à $ destination. Le caractère $message ne sera pas traité comme une nouvelle ligne par défaut ; 🎜🎜
    • 🎜4 : Envoyez $message directement au gestionnaire de journaux SAPI. 🎜🎜🎜🎜 Ensuite, examinons la connexion à la base de données Mysql à travers un exemple. Lorsque la connexion échoue, les informations d'erreur sont enregistrées. Un exemple est le suivant : 🎜
      <?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"); //发送到指定的文件中
      ?>
      🎜 Si l'on prend comme exemple le problème de connexion à la base de données Oracle, l'exemple d'utilisation de cette fonction est le suivant : 🎜
      <?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"); //发送到指定的文件中
      ?>

      代码运行之后就会在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();
      ?>

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

      Résumé de lutilisation de différentes méthodes pour enregistrer les rapports derreurs

      Résumé de lutilisation de différentes méthodes pour enregistrer les rapports derreurs

      其中我们需要注意的是:

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn