Que faire avec une page blanche sans aucune erreur PHP ?

Il arrive parfois qu’en affichant une page développée en PHP dans un navigateur, rien ne s’affiche : page blanche, totalement vide, sans aucune erreur PHP signalée. Pas de Warning, pas de Fatal Error, ni même de Notice. Grâce à certaines extensions de développement pour navigateur comme Firebug, à peine peut-on déceler une erreur 500, mais ce n’est pas forcément le cas. Du coup, impossible de savoir pourquoi la page plante. Alors comment faire apparaître les erreurs ?

Il y a deux techniques : la première, la plus connue, fonctionne dans 80% du temps. Si cette première technique n’a pas fonctionné, tu peux te rabattre sur la 2ème, qui fonctionne dans 99,99% du temps.

Faire apparaître les erreurs PHP avec ini_set et display_errors

Pas mal de développeurs ont l’habitude d’utiliser la fonction ini_set() pour afficher les erreurs PHP principales. Cela a l’avantage d’être très pratique, et d’écraser les paramètres d’affichage d’erreur -si par exemple ils sont réglés sur Off- en une seule ligne de code. Une des 3 lignes suivantes doit être placée dans le fichier PHP exécuté, ou dans un des fichiers PHP inclus.

<?php ini_set("display_errors",1); ?>

ou

<?php ini_set("display_errors",true); ?>

ou encore

<?php ini_set("display_errors","on"); ?>

Et ça fonctionne dans la plupart des cas. Maintenant, si ça ne fonctionne pas, tu peux te rabattre sur la 2ème technique.

Faire définitivement apparaître les erreurs PHP lors d’une page blanche

J’ai trouvé via Stackoverflow un code PHP assez puissant qui permet tout simplement de passer par-dessus tous les paramètres d’affichage d’erreurs diverses et variées. Voici le code, que tu peux coller dans le fichier concerné :

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
if(@is_array($error = @error_get_last()))
{
return(@call_user_func_array('ErrorHandler', $error));
};

return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
$_ERRORS = Array(
0x0001 => 'E_ERROR',
0x0002 => 'E_WARNING',
0x0004 => 'E_PARSE',
0x0008 => 'E_NOTICE',
0x0010 => 'E_CORE_ERROR',
0x0020 => 'E_CORE_WARNING',
0x0040 => 'E_COMPILE_ERROR',
0x0080 => 'E_COMPILE_WARNING',
0x0100 => 'E_USER_ERROR',
0x0200 => 'E_USER_WARNING',
0x0400 => 'E_USER_NOTICE',
0x0800 => 'E_STRICT',
0x1000 => 'E_RECOVERABLE_ERROR',
0x2000 => 'E_DEPRECATED',
0x4000 => 'E_USER_DEPRECATED'
);

if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
{
$name = 'E_UNKNOWN';
};

return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

Et pour une fois, pour une fois, tu seras content qu’une belle erreur PHP apparaisse sur ton projet.

And let’s go for the correction !

À propos de l'auteur

Alex GiannelliWebmaster à Marseille, Alex Giannelli travaille en tant qu'indépendant pour des TPE, PME et agences de communication depuis 2012. Spécialisé dans la création de site vitrine sous Wordpress et de boutique ecommerce sous Prestashop, ses compétences lui permettent aussi d'intervenir dans tout développement web. Formé chez Ranking Metrics, le référencement naturel et la gestion de campagnes Adwords font également partie de ses spécialités.Voir tous les articles par Alex Giannelli

Laisser une réponse