Définition
L'erreur 500 est un code d'état d'une page qui veut dire Internal Server Error, littéralement "Erreur interne du serveur". Cela veut dire qu'une erreur s'est produite au niveau du serveur web. Ceci peut provenir du serveur web Apache2, de l'interpréteur PHP qui a transféré l'erreur au serveur web ou bien de la base de données MySQL qui a transféré l'erreur au niveau de PHP et à son tour l'a transféré au serveur web. Ça ressemble à ceci :
Quant à certains autres navigateurs, il se peut que vous voyiez juste une page blanche sans contenu :
Pour les sites Prestashop, vous verrez une page d’erreur généré par Prestashop :
Pour diagnostiquer le problème, il sera plus pratique d’afficher les erreurs de votre site web directement sur celui-ci (même si celle-ci sont visibles sur le fichier error.log
du dossier log
accessible par votre compte FTP.
Procédure
L'erreur 500 est un code d'état d'une page qui veut dire Internal Server Error, littéralement "Erreur interne du serveur". Cela veut dire qu'une erreur s'est produite au niveau du serveur web. Ceci peut provenir du serveur web Apache2, de l'interpréteur PHP qui a transféré l'erreur au serveur web ou bien de la base de données MySQL qui a transféré l'erreur au niveau de PHP et à son tour l'a transféré au serveur web. Ça ressemble à ceci :
Quant à certains autres navigateurs, il se peut que vous voyiez juste une page blanche sans contenu :
Pour les sites Prestashop, vous verrez une page d’erreur généré par Prestashop :
Pour diagnostiquer le problème, il sera plus pratique d’afficher les erreurs de votre site web directement sur celui-ci (même si celle-ci sont visibles sur le fichier error.log
du dossier log
accessible par votre compte FTP.
Pour afficher les erreurs PHP, il sera nécessaire de modifier le fichier php.ini
du site web concerné. Dans ISPConfig, cliquez sur Sites puis sélectionnez le site web concerné :
Ensuite, cliquez sur l’onglet « Options » et ajoutez la ligne suivante sur le champ « Custom php.ini settings » :
display_errors = On
Il est également conseillé d'ajouter la ligne suivante pour s'assurer que les erreurs soient bien rapporté pour qu'ils s'affichent bien à l'écran (au cas où le script désactive cela par défaut) :
error_reporting = E_ALL
Certains CMS et framework comme WordPress, Prestashop, Symfony, Laravel, ... peuvent ignorer le fait que display_errors
soit sur On
au niveau de PHP, car ils ont leurs propres systèmes de gestion d’erreurs.
Pour activer le mode débogage d’un site basé sous WordPress, il faudra modifier le fichier wp-config.php
en mettant la valeur de WP_DEBUG
sur true
et WP_DEBUG_DISPLAY
sur true
également.
Si WP_DEBUG_DISPLAY
n’est pas sur wp-config.php
, il faudra l’ajouter après WP_DEBUG
:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true);
Pour activer le mode débogage sur Prestashop, il faudra modifier le fichier config/defines.inc.php
. Dans ce fichier, il faudra mettre _PS_MODE_DEV_
sur true
.
define('_PS_MODE_DEV_', true);
Pour activer le mode débogage sur Joomla, il faudra modifier le fichier configuration.php
. Dans ce fichier, il faudra mettre $debug
sur 1
et $error_reporting
sur maximum
.
public $debug = '1';
public $error_reporting = 'maximum';
Pour activer le mode débogage sur Laravel, il faudra modifier le fichier .env
de celui-ci en mettant APP_DEBUG
sur true
:
APP_DEBUG=true
Ensuite, il faut supprimer le cache des fichiers de configuration. Sur votre console, exécutez la commande suivante :
php artisan config:clear
La deuxième étape la plus importante est de comprendre les erreurs et apporter une solution.
Les erreurs « parse error » et « syntax error » proviennent d’une mauvaise écriture du code PHP : manque de point-virgule à la fin, parenthèse qui ne se ferme pas, guillemets, … Il sera alors nécessaire de vérifier le script de votre site web.
Certaines syntaxes peuvent également poser problème uniquement sur certaines version PHP, car la syntaxe de PHP évolue entre plusieurs versions. Par exemple, l’usage des crochets pour déclarer un tableau fonctionne sur PHP 7.2, alors que ce n’est pas le cas sur PHP 7.4.
Il serait alors intéressant de vérifier et d’ajuster la version de PHP selon les spécificités de votre site web.
Quand cette erreur se présente, la fonction que PHP tente d’appeler n’existe pas. Ce problème survient quand des fichiers sont manquants ou incomplets sur votre site web.
Ce message d’erreur indique que la fonction mysql_connect()
n’existe pas. Effectivement, cette fonction n’existe plus sur PHP 7.0 et ultérieur. Il faudra alors utiliser une version PHP 5.x pour que votre site web puisse fonctionner.
Quand cette erreur se présente, un même nom de fonction a été déclaré plusieurs fois. Ce problème survient notamment quand les plugins, thèmes, modules, … utilisent le même nom de fonction.
Ceci veut dire que la mémoire RAM maximum autorisé est dépassée. Ce problème survient quand vous dépasser la limite memory_limit
spécifié sur votre site web.
Les valeurs recommandés et pré-installés sur votre formule VPS sont les suivantes :
memory_limit=1024M
(1 Go)memory_limit=2048M
(2 Go)memory_limit=4096M
(4 Go)memory_limit=6144M
(6 Go)memory_limit=7168M
(7 Go)memory_limit=8192M
(8 Go)memory_limit=9216M
(9 Go)memory_limit=12288M
(12 Go)Toutefois, si vous souhaitez personnaliser la valeur de memory_limit
, vous pouvez le faire depuis ISPConfig.
Toujours dans l’onglet « Options » de votre site web sur ISPConfig, je vous invite à ajouter la ligne memory_limit
sur les directives PHP.INI :
Plus d’informations à ce sujet : Comment modifier le fichier php.ini de mon serveur VPS via ISPConfig ?
Ce message d’erreur est lié au fait que votre script PHP prend plus de temps à aboutir à un résultat, que ce que vos paramètres php.ini
l’autorise.
Pour palier à ce problème, vous pouvez augmenter le temps d’exécution maximum. Toujours dans l’onglet « Options » de votre site web sur ISPConfig, je vous invite à ajouter la ligne suivante sur les directives PHP.INI :
max_execution_time = 1800
Ici, nous avons mis 1800 secondes, soit 30 minutes.
Important : Si le temps d'exécution de PHP est trop important, Apache2 peut ne pas pouvoir attendre jusqu'à la fin. Par conséquent, Apache2 va envoyer une erreur 503 à votre visiteur (une erreur 522 ou 524 si vous utilisez CloudFlare). Il est alors important de garder cette valeur le plus petit possible. Nous vous conseillons de le mettre sur 30 secondes (max_execution_time = 30), sauf si vous prévoyez de faire des opérations d'importations ou d'exportations en masse sur vos sites.
Ceci indique que l’utilisateur MySQL ou le mot de passe que vous utilisez est incorrect.
Exemple de page d’erreur de type « Access Denied » sur Prestashop
Si vous êtes sur WordPress, le message d’erreur peut être différent :
Error establishing a database connection
Pour vérifier si un combiné utilisateur/mot de passe MySQL est fonctionnelle, je vous invite à vous rendre sur phpMyAdmin et à les utiliser.
Si phpMyAdmin affiche aussi une erreur comme celui-ci, alors votre utilisateur ou votre mot de passe MySQL est incorrect. Vous pourrez alors le réinitialiser sur ISPConfig.
Ce message d’erreur est lié au fait que votre site web tente de se connecter à votre serveur MySQL avec un socket Unix au lieu d’une connexion par TCP.
Or, le socket Unix qu’il tente d’utiliser n’est pas accessible à son niveau (effet de la restriction openbase_dir
par exemple).
Pour résoudre ce problème, il sera nécessaire de forcer votre site web à utiliser la connexion par TCP en remplaçant « localhost
» par « 127.0.0.1
» au niveau du paramètre du serveur MySQL de votre site web.
Pour un Prestashop 1.6, il faudra éditer le fichier config/settings.inc.php
:
Pour un Prestashop 1.7, il faudra éditer le fichier app/config/parameters.php
:
[...] 'database_host' => '127.0.0.1', [...]
Pour un site WordPress, il faudra éditer le fichier wp-config.php
:
[...] define(‘DB_HOST’, ‘127.0.0.1’); [...]
Pour un site Joomla, il faudra éditer le fichier configuration.php
:
[...] public $host = ‘127.0.0.1’; [...]
Vidéos