web-dev-qa-db-fra.com

Apache ne consigne pas les erreurs php

PHP via CLI enregistre avec succès les erreurs dans /var/log/php_errors.log.

Mais Apache + php ne consigne pas les erreurs.

[bla@notebook ~]$ apachectl -v
Server version: Apache/2.2.17 (Unix)
Server built:   May 19 2011 03:15:39

[bla@notebook ~]$ php -v
PHP 5.3.6 with Suhosin-Patch (cli) (built: Mar 23 2011 13:28:00) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

Dans php.ini j'ai:

display_errors = On
error_reporting = E_ALL | E_STRICT
log_errors = On
error_log = php_errors.log

Dans httpd.conf :

ErrorLog "/var/log/httpd/error_log"

Permissions:

[bla@notebook /]$ ls -la /var/log/httpd/
-rwxrwxr-x 1 root root 133351 21.11.2011 11:18 access_log*
-rwxrwxr-x 1 root http   1307 21.11.2011 11:18 error_log*

[bla@notebook /]$ ls -la /var/log/php_errors.log 
-rwxrwxr-x 1 root http 521 14.11.2011 17:31 /var/log/php_errors.log*

Comme vous pouvez le constater, le démon Apache est autorisé à écrire dans les fichiers journaux.

Toujours aucune erreur d'Apache ou PHP dans /var/log/php_errors.log et/var/log/httpd/error_log.

MISE À JOUR 1.

Changé cette ligne dans php.ini:

error_log = php_errors.log 

au chemin complet:

error_log = /var/log/php_errors.log 

Les autorisations étaient ok. Mais si quelqu'un rencontre également des problèmes, vous pouvez déboguer les autorisations de configuration du fichier journal 0777 ou le changement de propriétaire du fichier.

20
Justinas Lelys

Il existe généralement deux fichiers php.ini distincts pour Apache et CLI - êtes-vous sûr de regarder le bon?

Modifier:

2 autres options auxquelles je peux penser:

  • certaines directives Apache jouent avec le chemin du journal de PHP (ou désactivent les options de journalisation, bien que ce soit très peu probable) - essayez de définir un chemin absolu vers le fichier journal dans php.ini (@Frosty Z a suggéré quelque chose comme ça)
  • Je remarque que le correctif Suhosin est appliqué dans votre installation PHP, ce qui entraîne plusieurs modifications restrictives afin d'améliorer la sécurité. Et même si, en théorie, un utilisateur du groupe http dispose des autorisations suffisantes pour écrire dans le fichier journal, il existe probablement un comportement similaire à celui de suphp. Lorsque votre script est accessible via le Web, il est exécuté avec/comme nom d'utilisateur défini avec c'est le propriétaire (propriétaire du fichier du script): essayez de le modifier.
9
Narf

J'ai eu le même problème. 

La définition de log_errors_max_len = 0 dans php.ini a fonctionné pour moi.

PHP manuel :

Définissez la longueur maximale de log_errors en octets. Dans error_log des informations sur la source sont ajoutées. La valeur par défaut est 1024 et 0 permet de ne pas appliquer de longueur maximale du tout. Cette longueur est appliquée pour consigner les erreurs, les erreurs affichées et également pour $ php_errormsg, mais pas pour appeler explicitement des fonctions telles que error_log ().

5
popas

Dans le passé, je n'avais aucun journal d'erreur dans deux cas:

  1. L'utilisateur sous lequel Apache s'exécutait n'avait pas le droit de modifier le fichier php_error_log.
  2. L'erreur 500 s'est produite en raison d'une mauvaise configuration de .htaccess, par exemple, des paramètres de module de réécriture incorrects. Dans cette situation, les erreurs sont consignées dans le fichier Apache error_log.
2
sgnsajgon

httpd.conf n'est pas le seul endroit où Apache config peut s'asseoir, 

Par exemple: 

si vous utilisez une connexion sécurisée https:// votre configuration supplémentaire prévaudra et vous devrez rechercher une configuration dans des fichiers tels que /opt/local/Apache2/conf/extra/httpd-ssl.conf

vous pouvez y trouver quelque chose comme:

ErrorLog "/var/log/Apache/ssl_error.log"

Et vous ne verrez aucune erreur enregistrée dans le fichier journal normal, mais toutes iront à ssl_error.log 

0
Yevgeniy Afanasyev

Cela peut aussi être causé par la propre directive LogLevel d'Apache, qui, si elle est définie sur une valeur trop élevée, annulera la journalisation de PHP. Cependant, cela n'annule pas la capacité de PHP à générer des erreurs sur la page, c'est-à-dire display_error, et n'affecte pas non plus l'interface de ligne de commande PHP. La peine de regarder si vous avez cet ensemble particulier de symptômes.

0
Peter D Jones

Vérifiez le script PHP auquel vous accédez, et comment Apache est configuré pour pouvoir y accéder.

Dans certaines configurations (hôtes virtuels, répertoires spécifiques, etc.), le fichier error_log peut être défini sur un chemin/nom différent de celui par défaut.

Je suggérerais alors de vérifier vos fichiers de configuration Apache.

0
Frosty Z