Le WSOD de Drupal

Lundi, Février 6, 2012

Le WSOD ? Mais qu'est que c'est ? Et bien il s'agit en fait du WHITE SCREEN OF DEATH !!! le site est bloqué, page blanche, aucune erreur... bref c'est la panique ! Cela m'est arrivé quelques fois suite à l'installation de modules en developpement par exemple. Face au WSOD, l'admin Drupal n'est évidemment plus accessible, sinon ça serait trop façile, mais il existe quand même plusieurs solutions pour s'en débarrasser. Nous allons voir comment dans cet article.

Afficher les erreurs

La première étape consiste à afficher les erreurs pour cerner le problème. Par défaut il est recommandé de désactiver l'affichage des erreurs sur un site en prod, mais en rajoutant ces quelques lignes au début du fichier index.php on peut le réactiver.

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
?>

Vider le cache

On peut créer un script clear-cache.php déposé à la racine du serveur qui contiendras la ligne ci dessous. Le script auras pour effet de vider la table cache de Drupal sans risques d'effacer les données, attention toutefois à penser à supprimer le fichier une fois le cache vidé, sinon n'importe qui connaissant l'url pourras vider le cache.

<?php
db_query("DELETE FROM {cache};");
?>

On peut exécuter la même requête via PHPMyAdmin ou en connexion SQL via SSH

DELETE FROM cache;

Enfin si Drush est installé on peut aussi faire un

$ drush cc all

Désactiver un module

Imaginons que le WSOD soit apparu suite à l'installation du module views. Pour le désactiver on peut comme pour vider le cache, la même méthode. On peut crée un script module.php qui contiendras cette ligne. module_name est le nom du module à désactiver.

<?php
db_query("UPDATE system SET status='0' WHERE name='module_name';")
?>

Ou dans PHPMyAdmin ou SQL

UPDATE system SET status='0' WHERE name='module_name';

La commande SQL ci-dessous afficheras la liste des modules si besoin

SELECT name,status FROM system WHERE type='module';

Si Drush est installé cette commande permet de désactiver le module views

$ drush dis views
Tags: