8 votes

php écrit les erreurs dépréciées dans le journal des erreurs d'apache

Je viens de passer de Debian Lenny à Squeeze et j'ai remarqué que mon fichier /var/log/apache2/errors.log est bombardé des erreurs suivantes :

<b>Warning</b>:  Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br />
<br />
<b>Warning</b>:  Directive 'register_globals' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br />

Je trouve cela étrange puisqu'il s'agit d'un journal système et que php (via apache) essaie d'y écrire du code html. Cela semble se produire sur chaque pageload du serveur (y compris les hôtes virtuels).

La désactivation de ces valeurs n'est pas une option pour le moment (je travaille avec un code non maintenu). Mon php.ini contient entre autres choses :

error_reporting  = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = On
register_globals = On
magic_quotes_gpc = On

Je ne sais pas s'il s'agit d'une erreur de configuration de php ou d'apache. Quelqu'un sait-il comment éviter que ces messages soient écrits dans errors.log à chaque chargement de page ?

  • PHP : Version 5.3.2-2 Apache :
  • Apache/2.2.16 (Debian)

Merci, Gardar

10voto

Brad Points 3206

Alors que les autres réponses ici volonté ne fait pas en sorte que les erreurs soient écrites dans votre journal d'erreurs, il ignore tout simplement le message d'erreur. message d'erreur et de ne pas réparer le erreur .

Dans ce cas, l'erreur vient du fait que votre php.ini contient encore soit magic_quotes_gpc on ou magic_quotes_gpc off quelque part en elle. Il en va de même pour les register_globals on ou register_globals off .

L'erreur ne réside pas dans le fait que la directive est activée ou désactivée. L'erreur est que la directive ne devrait pas exister du tout. Commentez ces lignes dans votre php.ini ou supprimez-les complètement et PHP cessera d'écrire des erreurs à propos des directives dépréciées.

Bien entendu, cela peut poser des problèmes à votre application si elle exige que l'un ou l'autre de ces éléments soit activé.

La raison pour laquelle il s'agit d'une erreur en PHP 5.3 est qu'en PHP 6, ces directives n'existeront même pas et PHP 6 se comportera comme si elles étaient désactivées. Si vous envisagez de passer à PHP 6, c'est le bon moment pour commencer à mettre à jour ou à remplacer votre application.

Une autre solution consiste à rétablir la version 5.2 ou 5.1 de PHP.

Quant au fait que PHP écrive des erreurs dans le journal d'Apache, c'est naturel puisque PHP fonctionne en tant que module d'Apache. Vous pouvez mettre quelque chose comme error_log = /var/log/php_errors.log dans votre php.ini et redémarrez Apache pour séparer les erreurs PHP des erreurs Apache. Pendant que vous y êtes, je vous recommande de changer display_errors a off . Les messages d'erreur peuvent souvent contenir des informations sensibles que vous ne voudriez pas qu'un attaquant voie. Vous verrez probablement ceci écrit dans votre php.ini :

; - display_errors = Off           [Security]
;     With this directive set to off, errors that occur during the execution of
;     scripts will no longer be displayed as a part of the script output, and thus,
;     will no longer be exposed to remote users.  With some errors, the error message
;     content may expose information about your script, web server, or database
;     server that may be exploitable for hacking.  Production sites should have this
;     directive set to off.

Il n'y a aucune raison logique pour que les messages d'erreur contiennent du HTML.

Pour répondre à une autre question que vous n'avez pas posée, la raison pour laquelle PHP signale ceci comme étant in <b>Unknown</b> on line <b>0</b> est que le message d'erreur a été conçu pour les lignes de code PHP que vous avez écrites, mais l'erreur qu'il a trouvée était dans l'analyse du php.ini avant même qu'il n'ait lu une seule ligne de code ou même ouvert un fichier .php. Comme il n'a pas ouvert de fichier et qu'il n'a pas de numéro de ligne, il les signale comme "Inconnu" et "0".

0voto

bkks Points 1

Supprimer ~E_DEPRECATED

tadam :)

0voto

Anirudh Points 1195

Ce comportement peut être évité en réglant display_errors = Off . Je ne suis pas tout à fait satisfait de cette solution, écrire des erreurs au format html dans les fichiers de log me semble étrange. Si quelqu'un comprend ce comportement, qu'il me le dise :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X