Maison  >  Article  >  développement back-end  >  Partage de la journalisation des erreurs PHP

Partage de la journalisation des erreurs PHP

小云云
小云云original
2018-05-23 17:01:121750parcourir

Pour les développeurs PHP, une fois qu'un produit est utilisé, la première chose est de désactiver l'option display_errors pour éviter d'être attaqué par des pirates 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.
Après la mise en service d'un produit, il y aura forcément des messages d'erreur, alors comment enregistrer ces informations très utiles aux développeurs ?
Activez simplement les log_errors de PHP. Par défaut, ils sont enregistrés dans le fichier journal du serveur WEB, tel que le fichier error.log d'Apache.
Bien sûr, les journaux d'erreurs peuvent également être enregistrés dans des fichiers spécifiés.

# vim /etc/php.ini
display_errors = Off
log_errors = On
error_log = /var/log/php-error.log
另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。

-------------------------------------- --- ------------------
Journal 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 affectés par ces erreurs. Les chemins divulgués, les connexions aux bases de données, les tables de données et d’autres informations ont été piratés. 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 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 des rapports d'erreurs dans le programme dans le journal des erreurs, activez simplement la directive de configuration log_errors dans le fichier de configuration PHP. Les rapports d'erreurs sont 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 syslog du système. Les détails sont les suivants :
1 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. Utilisez le fichier spécifié pour enregistrer le journal du rapport d'erreurs. Le journal du rapport d'erreurs utilise un fichier spécifié pour enregistrer le journal du rapport d'erreurs. Si vous utilisez un fichier spécifié pour enregistrer le journal des erreurs, veillez à 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 (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.
Les instructions de configuration dans php.ini doivent être modifiées comme suit :
1. error_reporting = E_ALL ; Chaque erreur qui se produit sera signalée à PHP
2. Ne pas afficher les instructions ci-dessus. Tous les rapports d'erreurs pour les règles définies
3. log_errors = On ; Détermine l'emplacement de l'enregistrement de la déclaration de journal
4 log_errors_max_len = 1024 ; Définit la longueur maximale de chaque entrée de journal
5. /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 :
1. bool error_log ( string message [, int message_type [, string destination [, string extra_headers]] )
Cette fonction enverra des informations d'erreur au serveur Web fichier journal d'erreur, 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 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 les informations d'erreur au serveur TCP. À ce stade, le troisième paramètre de destination représente l'adresse IP et le port de destination. 3. Enregistrez les informations dans la destination du fichier.
Si l'on prend comme exemple la problématique 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、 错误信息记录到操作系统的日志里
错 误信息记录到操作系统的日志里错误信息记录到操作系统的日志里错误信息记录到操作系统的日志里 错误报告也可以被记录到操作系统日志里,但不同的操作系统之间的日志管理有点区别。在Linux上错误语句将送往syslog,而在Windows上错误 将发送到事件日志里。如果你不熟悉syslog,起码要知道它是基于UNIX的日志工具,它提供了一个API来记录与系统和应用程序执行有关的消息。 Windows事件日志实际上与UNIX的syslog相同,这些日志通常可以通过事件查看器来查看。如果希望将错误报告写到操作系统的日志里,可以在配 置文件中将error_log指令的值设置为syslog。
具体需要在php.ini中修改的配置指令如下所示: 
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误 
2. display_errors = Off ;不显示 满足上条指令所定义规则的所有错误报告 
3. log_errors = On ;决定日志语句记录的位置 
4. log_errors_max_len = 1024 ;设置每个日志项的最大长度 
5. error_log = syslog ;指定产生的错误报告写入操作系统的日志里 
除了一般的错误输出之外,PHP还允许向系统syslog中发送定制的消息。虽然通过前面介绍的error_log()函数,也可以向syslog中发送定制的消息,但在PHP中为这个特性提供了需要一起使用的4个专用函数。
分别介绍如下: 
define_syslog_variables() 
在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。 
openlog() 
打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。 
 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. ?>

相关推荐:

nginx php-fpm 输出php错误日志的配置方法

记录PHP错误日志 display

详解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