Page blanche après la mise à jour de WP Super Cache

Blank.
Aujourd’hui, j’ai mis à jour mon WordPress pour la version 3.0.

Comme d’habitude, cela s’est avéré être un moment pénible mais nécessaire.
Comme d’habitude, la mise à jour automatique a échoué.
Comme d’habitude, la version de mon plugin qtranslate a été déclarée incompatible et il a fallu tricher un peu (en le passant à « 3.0″ pour moi).

Mais, bien plus gênant, après que j’ai mis à jour WP Super Cache, et ce pour la deuxième, les visiteurs de ce blog ne se voyaient affiché qu’une page blanche.

J’avais rencontré le même problème lors de la dernière mise à jour et avais eu à bidouiller les sources mais j’espérais qu’un tel problème soit résolu sur la prochaine version. Avant que je ne soumette un patch au développeur, voici comment j’ai résolu mon problème.

Dans mon cas, le plugin mettait correctement en cache la page, générant un beau fichier html statique. Il détectait aussi tout à fait correctement que la page avait été mise en cache lors de la seconde visite et retrouvait le fichier de cache de manière correcte.

Ensuite, il faisait ça:

include( $cache_file );

Cela ne vous fait pas sourciller ? Souvenez-vous mon cache était un fichier html. Faire un include depuis php ne faisait rien d’autre que produire une Parse error.

Du coup, j’ai juste remplacé l’include par :

switch(array_pop(explode('.', $cache_file)))
{
	case 'php':
		include( $cache_file );
		break;
	default:
		readfile( $cache_file );
		break; 					
}

Sur la version que j’utilise (0.9.9.3), tout ça se passe dans le fichier wp-content/plugin/wp-cache/wp-cache-phase1.php, ligne 212.

Si vous avez activé la compression dans WP Super Cache, le code situé au dessus est très probablement faux aussi.

Bien sûr, le fix est assez sale. On ne devrait pas se fier à l’extension du fichier pour en déterminer le type mais je suis un paresseux (et un peu malade).

Une méthode plus propre serait de s’assurer au moment de la génération du cache qu’on a dans tous les cas un php valide, par exemple en rajoutant « ?> » et « <

  1. Aucun commentaire pour l'instant

  1. Aucun trackback pour l'instant