web-dev-qa-db-fra.com

php retourne 500 erreur mais pas de journal des erreurs

J'ai un problème lorsque j'ai une application php qui renvoie une erreur de serveur interne (500), mais rien ne s'affiche dans le journal des erreurs.

Maintenant, je sais qu’il ya des erreurs dans ce que j’essaie d’exécuter, je sais que des fichiers sont manquants et que rien ne doit apparaître dans le journal des erreurs d’Apache (sinon, comment puis-je savoir exactement ce qui me manque).

J'ai créé un script de test qui contient des erreurs dans la même configuration vhost et ces erreurs se présentent bien, de sorte que tout semble configuré jusqu'à php/Apache. Existe-t-il certaines erreurs php qui apparaissent dans le journal des erreurs (php est configuré pour afficher tout type d'avis, d'avertissement, d'erreur, d'erreur irrécupérable, etc.)?

Cela fonctionne sur Ubunut 10.04 avec les standards Apache et php du dépôt Ubuntu avec apt-get.

47
ryanzec

Analysez vos fichiers source pour trouver @.

Depuis le site de documentation php

Actuellement, le préfixe d'opérateur de contrôle d'erreur "@" va même désactiver rapport d'erreurs pour les erreurs critiques qui termineront le script exécution. Entre autres choses, cela signifie que si vous utilisez "@" pour supprime les erreurs d'une certaine fonction et soit elle n'est pas disponible ou a été mal typé, le script mourra là sans no indication de pourquoi.

49
Luc M

Peut-être que quelque chose désactive la sortie d'erreur. (Je comprends que vous essayez de dire que d'autres scripts affichent correctement leurs erreurs dans le journal des erreurs?)

Vous pouvez commencer à déboguer le script en déterminant où il se termine (commencez par ajouter un echo 1; exit; à la première ligne du script et en vérifiant si le navigateur génère 1 puis déplacez cette ligne vers le bas).

6
akirk

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.
5
sgnsajgon

Copiez et collez le texte suivant dans un nouveau fichier .htaccess et placez-le dans le dossier racine de votre site Web:

php_flag  display_errors                  on
php_flag  display_startup_errors          on

Les erreurs seront affichées directement dans votre page. 

C'est la meilleure façon de déboguer rapidement mais ne l'utilisez pas pendant longtemps car cela pourrait être une faille de sécurité.

4
Meloman

Pour les projets Symfony, assurez-vous de vérifier les fichiers dans le projet appes/logs

Plus de détails disponibles sur ce post:
Comment déboguer une erreur 500 dans Symfony 2

Btw, d'autres frameworks ou CMS partagent ce type de comportement.

3
Balmipour

Voici une autre raison pour laquelle les erreurs peuvent ne pas être visibles:

J'ai eu le même problème. Dans mon cas, j'avais copié la source depuis un environnement de production. Par conséquent, la variable ENVIRONMENT définie dans index.php a été définie sur 'production'. Cela a entraîné la définition de error_reporting sur 0 (pas de journalisation). Réglez-le simplement sur 'development' et vous devriez commencer à voir des messages d'erreur dans le journal Apache.

En fait, le 500 était dû à un point-virgule manquant dans la configuration de la base de données :-)

2
Aswin Kumar

Un autre cas qui m’est arrivé est que j’ai fait un CURL sur certaines de mes pages et que j’ai eu une erreur de serveur interne et que rien n’était dans les journaux Apache, même lorsque j’ai activé tous les rapports d’erreur.

Mon problème était que dans le CURL je mis curl_setopt($CR, CURLOPT_FAILONERROR, true);

Ce qui ne m'a pas alors montré mon erreur, bien qu'il y en ait eu une, c'est parce que l'erreur était au niveau du framework et non de celle de PHP, elle n'apparaissait donc pas dans les journaux.

1
eric.itzhak

Assurez-vous que vos autorisations de fichiers sont correctes. Si Apache n'a pas l'autorisation de lire le fichier, il ne peut pas écrire dans le journal.

0
Johnny Ruin

Si vous avez toujours une erreur 500 et aucun journal, vous pouvez essayer de l'exécuter depuis la ligne de commande:

php -f file.php

cela ne fonctionnera pas exactement comme dans un navigateur (à partir du serveur) mais s'il y a une erreur de syntaxe dans votre code, vous verrez un message d'erreur dans la console.

0
jcubic

Vous devez activer le journal des erreurs PHP.

Cela est dû à un petit problème aléatoire sur le serveur Web lorsque vous avez une erreur php, il génère une erreur interne de 500 (le même problème existe).

Si vous consultez le journal des erreurs PHP, vous devriez trouver votre solution.

voir ici dans la doc de comment l'activer dans le php.ini

0
Neal