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.
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.
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).
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
.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é.
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.
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 :-)
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.
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.
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.
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.