Définition
Lorsque vous essayez de visiter un site Web et que vous voyez le message d'erreur « 500 Internal Server Error », cela signifie qu'un incident s'est produit sur le site web. L'erreur peut être particulièrement frustrante car elle peut ne pas vous donner d'informations sur la cause spécifique de l'erreur. Cet article vous montre comment déboguer une erreur 500 dans votre site web.
Procédure
Lorsque vous essayez de visiter un site Web et que vous voyez le message d'erreur « 500 Internal Server Error », cela signifie qu'un incident s'est produit sur le site web. L'erreur peut être particulièrement frustrante car elle peut ne pas vous donner d'informations sur la cause spécifique de l'erreur. Cet article vous montre comment déboguer une erreur 500 dans votre site web.
Une page blanche n'est pas forcément une erreur 500. Et vice-versa. Une erreur 500 signifie qu'une erreur s'est produit lors du traitement de la requête HTTP. Ceci pourrait être une erreur d'exécution du script associé, un problème d'accès à une ressource, ... qui fait que le serveur web renvoie une réponse avec le code d'erreur 500. Une page blanche, en revanche, signifie que le serveur web n'a renvoyé aucun corps dans sa réponse, voire même aucune réponse.
Dans certaines situations, une erreur 500 fait que le serveur web n'a aucune réponse à apporter, et donc cause une page blanche. C'est éventuellement le cas quand aucune page d'erreur 500 n'a été configuré, ou également si la sortie d'erreur a été désactivé et ainsi le site n'a aucun message d'erreur à mentionner.
Certains navigateurs tel que Chrome et Internet Explorer affichent leur propre page d'erreur 500 lorsqu'ils reçoivent le code d'erreur en en-tête HTTP sans que le serveur n'apporte aucun contenu sur le corps de la réponse :
Les erreurs 500 sont souvent liés à un problème au niveau d'un des fichiers .htaccess agissant sur l'URL, ou une erreur PHP. Ainsi, en activant l'affichage d'erreurs avec l'option php.ini display_errors, vous devriez voir apparaître les erreurs PHP à la place de l'erreur 500.
Afin de déterminer que vous avez bien une erreur 500, il vous sera nécessaire de regarder le code d'erreur HTTP renvoyé par le serveur web à votre navigateur web. Ceci peut être identifié grâce à l'onglet « Réseau » du console développeur de votre navigateur :
Le premier reflexe a adopter est de consulter les fichiers logs associés à la requête HTTP : le fichier log Apache et le fichier log PHP. Les 300 derniers événements vous concernant sur le fichier log Apache peut être consulté depuis l'icône « Erreurs » sur votre interface cPanel, tandis que le fichier log PHP est généralement le fichier « error_log » visible à côté du fichier PHP concerné :
Il est toutefois possible que les erreurs ne sont pas affichés sur les logs. Ceci peut être le résultat d'une configuration qui empêche l'affichage et/ou le logging des erreurs PHP. En savoir plus.
Cependant, si vous utilisez WordPress, Prestashop ou Joomla, il est fort possible qu'aucun changement ne soit visible. Dans ce cas, il sera nécessaire d'activer l'affichage des erreurs dans leurs fichiers de configuration respectives.
La plupart des CMS tel que WordPress disposent d'un système interne de gestion des erreurs, ce qui empêche les paramètres PHP en place de traiter et effectuer des actions en fonction de l'erreur rencontré. En activant le mode débogage, vous demandez à ce système interne de gestion d'erreurs d'afficher les erreurs et/ou augmenter la verbosité des fichiers logs.
Pour activer le mode débogage, vous pouvez vous connecter directement au "Gestionnaire de fichiers" accessible depuis votre interface cPanel et éditer le fichier de configuration associé permettant d'activer ce mode.
Si votre site a été créé avec WordPress, vous pouvez activer le mode debug depuis le fichier "wp-config.php" se trouvant à la racine de votre hébergement web. Pour cela, il vous suffit de modifier la constante "WP_DEBUG" par la valeur "true" à la place de "false".
Vous pouvez aussi, si vous le désirez, ajouter la constante WP_DEBUG_LOG afin d'enregistrer les erreurs dans le fichier "wp-content/debug.log".
Il est nécessaire aussi de vérifier que la constante "WP_DEBUG_DISPLAY" ne soit pas défini sur votre fichier de configuration. Dans le cas contraire, il sera aussi nécessaire de passer cette valeur à true.
Le fichier de configuration devrait ressembler à ceci :
Sur Prestashop, vous pouvez activer le mode debug en vous rendant sur le fichier "define.inc.php" se trouvant dans le dossier "config".
Il vous sera nécessaire de modifier la constate "_PS_MOD_DEV_" par "true" à la place de "false". Si besoin, vous pouvez aussi activer le mode "_PS_DEBUG_PROFILING_" qui vous permettra de disposer de plus d'informations.
Le fichier de configuration devrait ressembler à ceci :
Pour Joomla, vous pouvez activer le mode debug en éditant le fichier configuration.php. En effet, dans ce fichier, il vous faut modifier la variable "$debug" par 1 pour l'activer. Il est nécessaire aussi de modifier la variable $error_reporting par "maximum" afin que toutes les erreurs s'affichent.
Le fichier de configuration devrait ressembler à ceci :
Il est fort possible que vous utilisiez un autre CMS. Afin de connaître la manipulation pour activer le mode debug, vous pouvez aussi taper sur le moteur recherche le "nom du CMS + Debug". En effet, cela devrait vous conduire directement sur un tutoriel vous expliquant la manipulation à effectuer pour activer ce mode.
Il est relativement simple de comprendre l'origine d'une erreur 500. En effet, il s'agit très souvent des mêmes erreurs qui reviennent.
1. La première erreur la plus courante est l'erreur "Parse error". En effet, celle-ci indique souvent un problème de syntaxe (une erreur au niveau de la programmation de votre code). L'erreur se défini comme suit:
Si nous prenons exemple sur le fichier index.php de notre site Wordpress sur lequel il manque un point-virgule à la fin de la ligne 17, le fichier Web sur lequel se trouve l'erreur est le suivant :
L'erreur visible en vous rendant sur l'URL sera la suivante :
2. L'erreur "Parse error: syntax error, unexpected end of file" indique qu'il semble manquer quelque chose à la fin du fichier.
Dans ce code, il manque par exemple l'accolade fermant l'instruction if.
3. L'erreur Parse Error: syntax error, unexpected (T_STRING), expecting ','or';' est souvent dû à une erreur liée au guillement se trouvant dans votre code.
En effet, sur ce code, il manque l'antislash sur le mot "d'erreur" comme dans le code suivant afin que cela fonctionne:
4. Vous pouvez aussi visualiser une erreur du type "Fatal Error". Cette erreur est l'une des erreurs les plus graves que vous pouvez rencontrer. De plus, elle provoque l'arrêt de votre script. Elle est défini comme suit:
Cette erreur indique souvent qu'une fonction n'a pas été définie comme dans le code suivant:
Vous allez de ce fait, voir l'erreur suivante: Fatal Error: Uncaught Error: Call to undefined function
Cette erreur est souvent due à l'une des choses suivantes:
5. Il est fort possible que vous ayez l'erreur "Fatal Error: cannot redeclare" indiquant que la fonction est défini une seconde fois. Le code pourrait ressembler à celui-ci:
Il est tout à fait possible d'éviter cette erreur en:
6. Vous pouvez avoir l'erreur "Fatal Error: allowed memory size exhausted".
Cela indique que le script PHP utilise trop de mémoire vive et dépasse la valeur maximum autorisé sur PHP.INI. Il s'agit de la valeur "memory_limit". Cette valeur peut être modifiée par vos soins sur les formules cPanel. Si malgré l'augmentation de la valeur à une valeur suffisamment haute le problème persiste, il est peut-être possible qu'une opération consummant beaucoup de mémoire se réitère trop souvent (voire à l'infini) dans votre script PHP. Les boucles infinies sont donc également des causes possibles de ce type d'erreur.
7. L'erreur "Fatal Error: Maximum execution time exceeded" signifie un dépassement du temps d'exécution de votre script. Vous pouvez modifier pour cela, la valeur "max_execution_time" dans votre configuration PHP.INI. Notez toutefois que tout processus s'exécutant de plus de 490 secondes ne sont pas autorisés sur nos formules d'hébergement mutualisé cPanel, mais surtout que si une page requiert un max_execution_time plus haute, cela voudrait également dire qu'elle va se charger plus lentement, ce qui n'est généralement pas souhaitable. Si la page qui a généré cette erreur traite beaucoup de données, nous vous conseillons d'effectuer des traitements en lots. Par exemple, au lieu de traiter 1000 produits à chaque ouverture de la page, il serait plus adapté de traiter par lots de 100 produits, via des requêtes AJAX, par exemple. Et vous aurez un TTFB (Time-To-First-Byte) plus faible.
8. L'erreur "Fatal error: Uncaught Error: Call to undefined function mysql_connect()" signifie que le module "mysql" n'est pas chargé sur la version PHP utilisé par vos soins. L'erreur se présente lorsque:
Vous pouvez modifier aisément la version PHP en vous rendant sur "Sélectionner une version PHP" se trouvant sur votre interface cPanel.
9. L'erreur "Permission denied" signifie que PHP ne dispose pas des droits pour accéder à un fichier ou dossier défini. L'erreur est souvent visible sous la forme suivante:
Warning file_put_contacts(/home/c123456/public_html/dossier/fichier.php): failed to open stream: Permission denied in /home/c123456/index.php on line 20
Dans ce cas, il est nécessaire de vérifier les chmod sur vos fichiers et dossiers. En principe les chmod sont les suivants:
10. L'erreur "No such file or directory" indique que PHP a besoin d'inclure un fichier qui ne semble pas présent sur votre espace FTP. L'erreur représente à la suivante:
Warning: require_once(/home/c123456/public_html/dossier/fichier.php): failed to open stream: No such file or directory in /home/c123456/public_html/index.php on line 20
Il faut dans ce cas là :
11. Vous pouvez visualiser l'erreur "Warning:session_start(): Cannot send session cookie headers already sent" qui indique qu'un flux a déjà été généré et qu'il n'est de ce fait plus possible d'utiliser la fonction "session_start". Cette erreur est visible sous la forme suivante:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/c123456/public_html/dossier/session.php:2 in /home/c123456/public_html/dossier/session.php on line 20
Les 3 causes pouvant provoquer cette erreur sont les suivantes :
Vous êtes désormais en mesure de connaître la raison d'une Erreur 500 ou page blanche. Vous êtes aussi en mesure de dépanner votre site internet.
N'hésitez pas à poser vos questions et/ou remarques en commentaire.
Pour aller plus loin
Vous êtes désormais en mesure de connaître la raison d'une Erreur 500 ou page blanche. Vous êtes aussi en mesure de dépanner votre site internet.
N'hésitez pas à poser vos questions et/ou remarques en commentaire.