Maison > Article > développement back-end > Introduction détaillée à la vérification des erreurs PHP
Pour les développeurs PHP, une fois qu'un produit est utilisé, l'option display_errors doit être désactivée immédiatement pour éviter d'être attaqué par des pirates informatiques en raison des chemins, des connexions à la base de données, des tables de données et d'autres informations divulguées par ces erreurs. Cependant, après la mise en service d'un produit, des erreurs se produiront inévitablement, alors comment enregistrer certains rapports d'erreurs utiles aux développeurs ? Nous pouvons enregistrer les rapports d'erreurs dans des fichiers texte séparés. L'enregistrement des journaux d'erreurs peut aider les développeurs ou les gestionnaires à vérifier s'il existe des problèmes avec le système. Si vous devez écrire le rapport d'erreurs du programme dans le journal des erreurs, activez simplement la directive de configuration log_errors dans le fichier de configuration PHP. Les rapports d'erreurs seront consignés par défaut dans le fichier journal du serveur Web, par exemple dans le fichier journal des erreurs error.log du serveur Apache. Bien sûr, vous pouvez également enregistrer le journal des erreurs dans un fichier spécifié ou l'envoyer au journal système du système. Les introductions respectives sont les suivantes :
1 Utilisez le fichier spécifié pour enregistrer le journal du rapport d'erreurs.
Utiliser Le fichier spécifié enregistre le journal du rapport d'erreurs. Utilisez le fichier spécifié pour enregistrer le journal du rapport d'erreurs. Utilisez le fichier spécifié pour enregistrer le journal du rapport d'erreurs. journal des erreurs, veillez à stocker ce fichier en dehors du répertoire racine du document pour réduire les erreurs et les risques d'attaque. Et le fichier doit être écrit par l'utilisateur qui exécute le script PHP (le propriétaire du processus du serveur Web). Supposons que dans le système d'exploitation Linux, le fichier error.log dans le répertoire /usr/local/ est utilisé comme fichier journal des erreurs et que l'utilisateur du processus du serveur Web est configuré pour disposer d'autorisations d'écriture. Ensuite, dans le fichier de configuration PHP, définissez la valeur de la directive error_log sur le chemin absolu du fichier journal des erreurs.
Vous devez modifier les instructions de configuration dans php.ini comme suit :
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 ;指定产生的 错误报告写入的日志文件位置
Le fichier de configuration PHP est défini comme ci-dessus. Plus tard, redémarrez le serveur Web. De cette façon, lors de l'exécution d'un fichier de script PHP, tous les rapports d'erreurs générés ne seront pas affichés dans le navigateur, mais seront enregistrés dans le journal des erreurs /usr/local/error.log spécifié par vous. De plus, non seulement toutes les erreurs qui répondent aux règles définies par error_reporting peuvent être enregistrées, mais un message d'erreur défini par l'utilisateur peut également être envoyé à l'aide de la fonction error_log() en PHP.
Le prototype de cette fonction est le suivant :
1. bool error_log ( string message [, int message_type [, string destination [, string extra_headers]]] )
Cette fonction enverra des informations d'erreur au fichier journal des erreurs du serveur Web, à un serveur TCP ou à un fichier spécifié. Cette fonction renvoie VRAI en cas de succès et FAUX en cas d'échec. Le premier message de paramètre est requis, c'est-à-dire le message d'erreur à envoyer. Si seul ce paramètre est utilisé, le message sera envoyé à l'emplacement défini dans le fichier de configuration php.ini. Le deuxième paramètre message_type est une valeur entière : 0 signifie l'envoyer au journal du système d'exploitation ; 1 utilise la fonction Mail() de PHP pour envoyer le message à une adresse e-mail, et le quatrième paramètre extra_headers sera également utilisé ; Envoyez le message d'erreur au serveur TCP. À ce stade, le troisième paramètre destination représente l'adresse IP et le port de destination. 3. Enregistrez les informations dans le fichier de destination.
Si l'on prend comme exemple le problème de connexion à la base de données Oracle, l'utilisation de cette fonction est la suivante :
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 Les informations d'erreur. est enregistré dans le système d'exploitation Dans le journal
Les informations sur les erreurs sont enregistrées dans le journal du système d'exploitation. Les informations sur les erreurs sont enregistrées dans le journal du système d'exploitation. peut également être enregistré dans le journal du système d'exploitation. Mais il existe certaines différences dans la gestion des journaux entre les différents systèmes d'exploitation. Sous Linux, les déclarations d'erreur seront envoyées au syslog, tandis que sous Windows, les erreurs seront envoyées au journal des événements. Si vous n'êtes pas familier avec syslog, sachez au moins qu'il s'agit d'un outil de journalisation basé sur UNIX qui fournit une API pour enregistrer les messages liés à l'exécution du système et des applications. Le journal des événements Windows est en fait le même que le journal système UNIX, et ces journaux peuvent généralement être consultés via l'Observateur d'événements. Si vous souhaitez écrire des rapports d'erreurs dans le journal du système d'exploitation, vous pouvez définir la valeur de la directive error_log sur syslog dans le fichier de configuration.
Les instructions de configuration spécifiques qui doivent être modifiées dans php.ini sont les suivantes :
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误 2. display_errors = Off ;不显示 满足上条指令所定义规则的所有错误报告 3. log_errors = On ;决定日志语句记录的位置 4. log_errors_max_len = 1024 ;设置每个日志项的最大长度 5. error_log = syslog ;指定产生的错误报告写入操作系统的日志里
En plus de la sortie d'erreur générale, PHP permet également d'envoyer system syslog Envoyer des messages personnalisés. Bien que des messages personnalisés puissent également être envoyés à syslog via la fonction error_log() introduite précédemment, PHP fournit quatre fonctions dédiées à cette fonctionnalité qui doivent être utilisées ensemble.
sont présentés comme suit :
define_syslog_variables()
Vous devez appeler cette fonction avant d'utiliser les trois fonctions openlog(), syslog et closelog( ) fonction. Parce que lorsque cette fonction est appelée, elle initialisera certaines constantes nécessaires pour les trois fonctions suivantes en fonction de l'environnement système actuel.
openlog()
Ouvrez une connexion à l'enregistreur dans le système actuel pour préparer l'insertion des messages de journal dans le système. Et insérez le premier paramètre de chaîne fourni dans chaque message de journal. La fonction doit également spécifier deux paramètres qui seront utilisés dans le contexte du journal. Vous pouvez vous référer à la documentation officielle pour l'utiliser.
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的解析工具来查看和分析日志。但如果你的网站在共享服务器的虚拟主机中运行,就只有使用单独的文本文件记录错误日志了。
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!