Maison  >  Article  >  développement back-end  >  Comment enregistrer les erreurs PHP

Comment enregistrer les erreurs PHP

coldplay.xixi
coldplay.xixioriginal
2020-08-14 15:39:103466parcourir

La méthode d'enregistrement des journaux d'erreurs PHP : définissez d'abord le fichier de configuration PHP ; puis utilisez le fichier spécifié pour enregistrer le journal du rapport d'erreurs ; enfin, les informations d'erreur sont enregistrées dans le journal du système d'exploitation.

Comment enregistrer les erreurs PHP

Comment enregistrer les journaux d'erreurs PHP :

1. Utilisez le fichier spécifié pour enregistrer l'erreur. journal des rapports

Si vous utilisez un fichier auto-spécifié pour enregistrer les journaux d'erreurs, assurez-vous de stocker ce fichier en dehors du répertoire racine du document pour réduire le risque d'attaque.

Et le fichier doit être écrit par l'utilisateur qui exécute le script PHP (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.

Recommandations d'apprentissage associées : programmation php (vidéo)

Vous devez modifier les instructions de configuration dans php.ini comme suit :

  • error_reporting = E_ALL ; Signalera chaque erreur qui se produit à PHP

  • display_errors = Off ; Ne pas afficher les règles définies dans la commande précédente Tous les rapports d'erreurs

  • log_errors = On ; Détermine l'emplacement de l'enregistrement des déclarations de journal

  • log_errors_max_len = 1024 ;

  • error_log = /usr/local/error.log ; Spécifiez l'emplacement du fichier journal où le rapport d'erreur généré est écrit

Une fois le fichier de configuration PHP défini comme ci-dessus, 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 :

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 obligatoire et constitue 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 signifie utiliser la fonction Mail() de PHP pour envoyer le message à une adresse e-mail, et le quatrième paramètre extra_headers sera également utilisé ; 2 signifie envoyer 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 :

<?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 Les informations d'erreur sont enregistrées dans le journal. du système d'exploitation

Les rapports d'erreurs peuvent également être enregistrés dans le journal du système d'exploitation, mais la gestion des journaux est légèrement différente selon 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. Les journaux d'événements Windows sont en fait les mêmes que le syslog d'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 :

  • error_reporting = E_ALL ; chaque erreur qui se produit sera signalée à PHP

  • display_errors = Off ;Ne pas afficher tous les rapports d'erreurs répondant aux règles définies dans la commande précédente

  • log_errors = On ;Déterminer le enregistrement de l'instruction de journal Position

  • log_errors_max_len = 1024 ; Définir la longueur maximale de chaque entrée de journal

  • error_log = syslog ; Spécifier le rapport d'erreur généré pour être écrit dans le système d'exploitation Dans le journal

En plus de la sortie d'erreur générale, PHP permet également d'envoyer des messages personnalisés au syslog du système. 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() 

Cette fonction doit être appelée avant d'utiliser les trois fonctions openlog(), syslog et closelog(). 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() 

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

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(); 
 ?>

相关学习推荐:编程视频

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