WordPress : l’extension qui générait une erreur 500 dans /wp-admin

Apache Erreur 500

La redoutable erreur 500 !

Il y a quelques jours, nous avons mis à jour nos serveurs de production de php5.6 à php7.2. Si dans l’ensemble tout s’est bien passé, j’ai eu une assez mauvaise surprise en voulant me connecter aux back-offices de nos sites propulsés par WordPress.

J’accédais bien au site et au formulaire d’identification pour se connecter au back-office mais malheureusement, une fois le bouton « Se connecter » cliqué, je tombais sur une page affichant la redoutable erreur 500 : Internal Server Error (Erreur interne du serveur dans la langue de Molière).

La première chose à faire dans ces cas-là, c’est de trouver l’origine du problème. Logique me direz-vous ! Sachez que souvent, les erreurs 500 sont causées par des extensions présentant des incompatibilités ou des erreurs dans leur code source. Nous allons donc voir comment vérifier que votre erreur 500 n’est pas dû à une extension récalcitrante.

 

Les fichiers journaux du serveur

L’erreur 500 étant une erreur interne du serveur (comme son nom l’indique si bien), la solution la plus rapide et la plus efficace reste d’ouvrir les fichiers journaux du serveur (logs dans la langue de Shakespeare). Dans mon cas, cela m’a permis de très vite identifier mon problème :

Fatal error: Uncaught Error: [] operator not supported for strings in /path/to/worpress/wp-content/plugins/revslider/inc_php/framework/base_admin.class.php:72 Stack trace: #0 /path/to/worpress/wp-content/plugins/revslider/revslider_admin.php(157): UniteBaseAdminClassRev::addMetaBox('Revolution Slid...', Object(UniteSettingsAdvancedRev), Array, NULL) #1 /path/to/worpress/wp-content/plugins/revslider/revslider_admin.php(68): RevSliderAdmin->addSliderMetaBox() #2 /path/to/worpress/wp-content/plugins/revslider/revslider_admin.php(40): RevSliderAdmin->init() #3 /path/to/worpress/wp-content/plugins/revslider/revslider.php(146): RevSliderAdmin->__construct('/path/to/worpress/wp...') #4 /path/to/worpress/wp-admin/includes/plugin.php(1897): include('/path/to/worpress/wp...') #5 /path/to/worpress/wp-admin/plugins.php(178): plugin_sandbox_scrape('revslider/revsl...') #6 {main} thrown in /path/to/worpress/wp-content/plugins/revslider/inc_php/framework/base_admin.class.php on line 72

 

C’est donc l’extension « Revolution Slider » de ThemePunch qui générait une erreur fatale. Le message d’erreur étant assez clair, il m’a été facile de corriger le script incriminé. Mais j’y reviendrai plus tard.

Si vous n’avez pas accès aux fichiers journaux du serveur ou que tout simplement ils sont illisibles à vos yeux, il existe une autre méthode, certes plus chronophage, mais tout aussi efficace.

 

Désactiver les extensions

Cette autre méthode est relativement simple pour vérifier que l’erreur 500 n’est pas due à une extension. Il vous faudra cependant un accès FTP ou SSH au serveur où se trouve votre instance WordPress.

  1. Via FTP ou SSH, rendez vous dans le répertoire /wp-content de votre wordpress.
  2. Renommez le répertoire /plugins en /plugins-old. Cela va avoir pour effet de désactiver toutes les extensions de votre site.
  3. Dans votre navigateur, vérifiez que vous accédez désormais à votre back-office. N.B. : Si ce n’est pas le cas, c’est que l’erreur 500 n’est pas dû à une extension récalcitrante et de ce fait, cette méthode ne vous permettra malheureusement pas de résoudre votre problème. 🙁
  4. Créez maintenant un nouveau répertoire /plugins.
  5. Copiez une extension du répertoire /plugins-old dans le répertoire /plugins
  6. Depuis votre back-office, activez l’extension :
    a. Si elle s’active sans encombre, répétez les étapes 5 et 6 avec une autre extension.
    b. Si elle ne s’active pas, un message d’erreur s’affichera au dessus de la liste des extensions. Vous pourrez alors constater l’erreur.
  7. Maintenant que vous avez identifiez l’extension qui pose problème, vous avez deux solutions :
    a. Corriger l’erreur, ce qui demande la plupart du temps de modifier un ou des scripts en php
    b. Remplacer l’extension par une autre aux fonctionnalités similaires

Pour ma part, j’ai opté pour la solution a. Je n’avais vraiment pas envie d’avoir à reconfigurer une autre extension « slider ».

 

Correction de l’extension RevSlider

Php, jusqu’aux versions les plus récentes, a toujours été très permissif. Cela lui a d’ailleurs valu sa mauvaise réputation de langage de « bricoleurs ». Par exemple, il était tout à fait possible de déclarer une variable comme chaîne de caractères et l’utiliser ensuite comme un tableau. Certes, ça a toujours été considéré comme une mauvaise pratique mais comme le langage le permettait, de nombreux développeurs ne faisaient pas attention. Mea culpa : moi-même, il m’est arrivé de le faire. Heureusement, depuis sa version 7 (il me semble), php ne permet plus ce genre de mauvaises pratiques. Dans un sens, je pense que la « professionnalisation » de php lui est et lui sera très salutaire. Ce n’est que mon avis cela dit.

Bref, revenons à nos moutons électriques. Tel Rick Deckard, personnage emblématique créé par Philip K. Dick, je suis donc parti en chasse du vilain bug de RevSlider. Comme indiqué dans l’erreur fatale, j’ai donc ouvert le fichier /path/to/worpress/wp-content/plugins/revslider/inc_php/framework/base_admin.class.php. Toujours en suivant les indications de l’erreur, je me suis ensuite rendu ligne 72 :

self::$arrMetaBoxes[] = $box;

 

La variable $arrMetaBoxes[] est donc un tableau. Or, ligne 23, cette variable est déclarée ainsi :

private static $arrMetaBoxes = "";        //option boxes that will be added to post

 

Et oui, tragique erreur de développement : une chaîne de caractères qui se transforme par magie en tableau. Pas sérieux tout ça. 😛

Vous l’aurez sans doute compris, il m’a suffit de remplacer la ligne 23 ci-dessus par :

private static $arrMetaBoxes = [];        //option boxes that will be added to post

 

Et le tour était joué !

 

Pour conclure

Comme vous l’aurez constaté, il suffit parfois d’un rien pour générer une erreur 500. Dans tous les cas, les fichiers journaux sont une mine d’information pour résoudre ce genre de problème. Bien entendu, la plupart du temps il vous faudra mettre les mains dans le cambouis. Heureusement, la résolution est souvent relativement simple pour peu que l’on lise correctement le message d’erreur.

Laisser un commentaire