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.
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:
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.J'ai eu le même problème.
La définition de log_errors_max_len = 0
dans php.ini a fonctionné pour moi.
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 ().
Dans le passé, je n'avais aucun journal d'erreur dans deux cas:
php_error_log
..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
.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
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.
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.