web-dev-qa-db-fra.com

php error_log ne fonctionne pas

Cela a été demandé 1 000 fois et j'ai parcouru les différents articles avant de poster ceci, mais je n'ai pas trouvé de réponse. Tant que j'ai programmé avec PHP, cela a toujours été un cauchemar de travailler. Est-ce que quelqu'un peut me dire ce que je fais mal ici?

J'ai error_log défini dans le fichier ini avec error_reporting = E_ALL | E_STRICT

Que manque-t-il d'autre? Cela me le donnait généralement. Je veux cet ensemble dans le fichier ini et non dans mes scripts.

Une autre chose intéressante qui se passe est que lorsque je tente volontairement de créer une erreur dans un de mes scripts, Apache redémarre encore et encore.


Ceci est mon journal des événements après une erreur. Butin à l'horodatage

Wed Nov 04 19:34:23 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:23 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:23 2009] [notice] Parent: Created child process 1700
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Child process is running
[Wed Nov 04 19:34:23 2009] [notice] Child 3008: Released the start mutex
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Acquired the start mutex.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting 64 worker threads.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting thread to listen on port 80.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: All worker threads have exited.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: Child process is exiting
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:53 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:53 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:53 2009] [notice] Parent: Created child process 3656
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Child process is running
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Acquired the start mutex.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting 64 worker threads.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting thread to listen on port 80.
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 3980
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting thread to listen on port 80.
[Wed Nov 04 19:34:54 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 1600
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 1068
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Child process is running
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Acquired the start mutex.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting 64 worker threads.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 3220
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Child process is running
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Acquired the start mutex.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting 64 worker threads.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting thread to listen on port 80.
22
Jim

Vous devez également définir log_errors = On dans le fichier php.ini.

9
chaos

Si quelqu'un d'autre a des difficultés à enregistrer les erreurs dans son environnement de développement local, voici ce qui a été résolu:

Sur Windows, error_log doit être défini sur le chemin complet du journal pour que error_log() fonctionne (error_log = c:\Apache\php_errors.log). Cependant, si error_log = php_errors.log sans chemin d'accès, php pourra toujours enregistrer les erreurs de démarrage telles que

PHP Startup: Unable to load dynamic library 'ext\php_mysqli.dll' - The specified module could not be found
8
Mel Reams

Le problème que j'ai rencontré était que le journal des erreurs que j'avais désigné était protégé en écriture. Tous mes paramètres .htaccess étaient corrects, PHP ne pouvait tout simplement pas écrire dans le journal des erreurs car il ne disposait d'aucune permission. Cela a réglé le problème pour moi:

chmod 777 watermellon-app-errors.log

Évidemment, vous allez vouloir changer le fichier .log en n’importe quel fichier que vous utilisez pour un journal. 

7
Thomas Keene

Vérifiez que PHP-FPM ne définit pas explicitement error_log:

Assurez-vous que le fichier /etc/php-fpm.d/www.conf ne contient pas les paramètres php_admin_value pour error_log. Recherchez les éléments suivants et commentez-les à l'aide d'un point-virgule:

; NOTE: If these are set, ini_set('error_log', 'path') will have no effect 
; inside your php code, and this will be forced to be the value always.
; php_admin_value[error_log] = /var/log/php-fpm/www-error.log
; php_admin_flag[log_errors] = on

Puis redémarrez php-fpm:

systemctl restart php-fpm

Vérifiez que les fichiers .htaccess d’Apache ne définissent pas la valeur error_log à l’aide de

Les paramètres php_admin_value dans les fichiers de configuration Apache ne peuvent pas être remplacés, assurez-vous de ne pas avoir de valeur php_admin_value pour le paramètre error_log dans les fichiers de configuration Apache. Vérifiez également les paramètres php_value au cas où.

PHP Site Web - Comment modifier les paramètres de configuration

4
Basil Musa

Si la directive error_log est définie, le fichier sera utilisé pour enregistrer les erreurs php. S'il n'est pas défini, les erreurs seront consignées dans le journal Apache. Jetez un coup d’œil à http://us3.php.net/manual/fr/errorfunc.configuration.php#ini.error-log .

Le fichier error_log et le répertoire dans lequel il se trouve doivent être accessibles en écriture à l'utilisateur sous lequel s'exécute Apache. Si le fichier n'est pas créé, cela est probablement dû à un problème d'autorisations.

Je ne sais pas vraiment pourquoi Apache planterait sur vous, mais j'imagine que c'est un problème d'autorisations.

4
bradym

Je ne comprends pas pourquoi , mais le journal des erreurs fonctionne maintenant. Voici ce que j'ai fait. J'ai abandonné et commenté la directive error_log et fermé le fichier ini. J'ai exécuté le script avec l'erreur d'analyse pour voir qu'Apache se plantait toujours et j'ai l'erreur PHP dans le fichier journal. C'est bizarre parce que error_log n'est plus activé dans le fichier ini et que mon script n'utilise pas ini_set ().

Quelqu'un a-t-il une explication à cette folie? En outre, Apache ne plante plus.

1
Jim

Dans mon cas, sur un serveur de développement CentOS, après un yum update complet, l’autorisation sur/var/log/http a été remplacée par 700 et l’utilisateur a été 'root', de sorte que l’utilisateur 'Apache' n’a pas pu entrez ou écrivez dedans. Il était toujours capable d'écrire dans le fichier existant /var/log/httpd/error.log mais il n'a pas été possible de créer un nouveau fichier, car j'utilise des fichiers journaux avec suffixe de date . commander

chown Apache /var/log/httpd

résolu le problème.

1
Zoltan M

Si vous utilisez Fedora, SELinux (activé par défaut) empêchera Apache/httpd d’ajouter des erreurs à votre fichier journal même si votre fichier est spécifié dans le fichier php.ini et que son répertoire qui contient toutes les autorisations autorisées. 

Vous pouvez voir si cela se produit en consultant votre fichier journal système dans/var/log/messages

enter image description here

La solution idéale consiste à configurer SELinux pour autoriser l'accès au fichier journal. 

La solution la plus rapide consiste à désactiver SELinux dans/etc/selinux/config en définissant SELINUX sur disabled. 

Vous devrez ensuite redémarrer votre système pour que la modification soit prise en compte. 

1
Anthony

Voici comment cela fonctionne sur mon Ubuntu (Apache 2.4.7, PHP 5.5.9):

script en ligne de commande:

  • écrit le journal dans le chemin indiqué par error_log si log_errors = On. Paramètres dans /etc/php5/cli/php.ini;

demande web via Apache:

  • si log_errors = On (/etc/php5/Apache2/php.ini), l'erreur est ajoutée au chemin indiqué par la directive ErrorLog Apache dans l'hôte virtuel. Si cette directive n'existe pas, le chemin d'accès php.ini error_log est utilisé;
  • si log_errors = Off pas les journaux sont écrits n'importe où;

Autant que je me souvienne, cela a presque fonctionné de la sorte dans la plupart des piles Linux

0
Elvis Ciotti

Comme bradym l'a dit, vérifiez si vous avez des autorisations d'écriture sur le répertoire où se trouve votre journal des erreurs php pour l'utilisateur Apache. Si vous avez créé un fichier journal avec des autorisations écrites, cela ne suffit pas, le répertoire devrait aussi en avoir.

0
Łukasz Frankowski

Voici mon guide de dépannage pour les appels error_log() ne fonctionnant pas.

  1. Examinez la configuration de votre serveur pour savoir où se trouve le fichier journal des erreurs par défaut.

    Cela dépend du serveur que vous utilisez. Pour commencer, jetez un œil à l’option ErrorLog d’Apache si vous utilisez Apache ou l’option error_log - de Nginx si vous utilisez Nginx. Assurez-vous qu'il est défini sur un fichier. Si vous utilisez un outil tel que Valet, notez qu'il utilise un logiciel serveur tel que Nginx en coulisse.

  2. Vérifiez les autorisations du fichier journal des erreurs de votre serveur.

    Sur les systèmes de type Unix, il doit être accessible en écriture au bon utilisateur et au bon groupe, et les autorisations du répertoire parent et de tous ses ancêtres doivent également être correctes. Utilisez chmod et chown.

  3. Vérifiez la configuration de PHP dans les fichiers .ini.

    Plus précisément, recherchez les codes log_errors = On et error_reporting = E_ALL | E_STRICT et error_log = /tmp/example/php_errors.log (voir la documentation pour les paramètres log_errors , error_reporting et error_log paramètres de configuration). Pour trouver le fichier .ini, examinez le résultat de phpinfo();. Si error_log n'est pas défini, il se connecte par défaut au journal des erreurs du serveur, mentionné dans les étapes précédentes. Si error_log est défini sur un fichier, celui-ci devrait déjà exister et être accessible en écriture, comme dans les étapes précédentes. N'oubliez pas de redémarrer le serveur après les changements de configuration.

  4. Vérifiez que les paramètres de PHP ne sont pas modifiés par la configuration du serveur.

    La configuration de votre serveur (même .htaccess) peut modifier les paramètres de configuration PHP. Dans Apache, ceci est fait en utilisant php_admin_value et php_admin_flag ( docs ). Par exemple, vous pouvez trouver dans votre fichier .htaccess cette ligne: php_admin_flag[log_errors] = off. N'oubliez pas de redémarrer le serveur après les changements de configuration.

    À ce stade, vous devriez pouvoir créer un fichier de test test.php avec le contenu <?php error_log("test");, redémarrer votre serveur et ouvrir l’URL de votre navigateur. Le nom test devrait également s'afficher dans votre journal des erreurs (le un spécifié par error_log =). Mais continuez à lire.

  5. Vérifiez que les paramètres de PHP ne sont pas modifiés au moment de l'exécution.

    L'option log_errors peut être modifiée à l'exécution en exécutant ini_set('log_errors', 1);, de même que les autres options de configuration error_reporting et error_log. Notez également qu’il existe une fonction error_reporting() PHP spéciale qui modifie la configuration au moment de l’exécution. Recherchez dans votre base de code toutes les invocations de ini_set ou error_reporting. WordPress, par exemple, les exécute en fonction de la valeur de WP_DEBUG.

Autres points à examiner: Vous rencontrez peut-être des problèmes d’autorisation dans SELinux (voir cette réponse ).

0
Flimm

Error_log = "C:\php\Log\error.log" ne fonctionnait pas pour moi non plus. La solution pour moi était de ne pas créer le fichier error.log vous-même, car PHP le fera pour vous. Voir le tableau de messages PHP. J'utilise PHP 5.2 sur un serveur Windows 2008

0
Cerveser

Cela a fait le tour pour moi. 

setsebool -P httpd_unified 1

S'il vous plaît noter que ce serait la méthode préférée ci-dessous pour essayer d'abord:

semanage fcontext -a -t httpd_sys_rw_content_t 'errorLogNameHere.error.log
restorecon -v 'errorLogNameHere.error.log'

Cette réponse a été dérivée des journaux de l'exécution de cette ligne de commande:

journalctl -xe 

Plus d'informations sur le système sur lequel je travaillais: PHP 7.0 et CentOS 7

Pas sûr que ce ne soit pas évident, mais le problème était la configuration d'Apache pour l'écriture de fichiers. J'ai essayé chmod 777, chmod a + w sur le répertoire de journalisation, mais cela n'a pas fonctionné pour moi. 

J'espère que cela peut aider quelqu'un.

0
fungusanthrax