Traduction WordPress : réduire (énormément) l’utilisation de la mémoire PHP

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 368640 bytes)

C’est énervant hein ?

Pour tous ceux qui hébergent un blog wordpress sur des hébergement limité, cette erreur revient souvent. Cela est due à un paramètre du serveur, qui limite la mémoire utilisable pour l’exécution de scripts PHP, afin de préserver les ressources serveur.

La limite est fréquemment de 32  Mo ce qui est TRES insuffisant pour un blog wordpress un peu élaboré, 64 serait le minimum vital, 128 le confort, 256 la sécurité totale. Mais ces valeurs sont très rares sur les hébergements mutualisés.

L’une des raisons de cette utilisation de la mémoire par WordPress : la traduction. Et oui ! Après une discussion sur le forum francophone de wordpress, l’un des membres signale cet état de fait :

WordPress utilise théoriquement la technique dite « gettext », uniformisée et largement utilisée par les développeurs, car c’est une fonction native du langage php.

Mais curieusement, WordPress utilise son propre système, via des scripts php et donc tout le système de traduction utilise la mémoire php ! L’un des membres du forum signale une solution intéressante : modifier le fichier wordpress faisant appel a cette fonction, afin de réduire de 75% l’utilisation de la mémoire et la libérer pour d’autres scripts !!!!

Ce « patch » a été signalé sur le site officiel wordpress (http://core.trac.wordpress.org/ticket/17268) et en voici la version finale du fichier l10n.php qui se trouve dans /wp-include/

===========================

Télécharger le fichier : Fichier gettext l10n.php de Wordpress (297) pour wordpress 3.1.3 UNIQUEMENT

Comment ca marche ?

Le nouveau fichier va créer un dossier /wp-lang/ à la racine de votre site, dans lequel il va transférer des fichiers de langue .mo réduits en taille. Il ne traduit QUE ce qui est utilisé. (pour tout ! thèmes, plugins, wordpress). De fait, le temps que la traduction limitée soit réalisée votre interface peut s’afficher en anglais quelques secondes. Rafraîchissez simplement l’écran et la traduction sera appliquée.

Ce problème me fait dire qu’il est peu probable que ce « patch » soit officiellement appliqué sous cette forme car du coup cela peut être très surprenant pour un utilisateur qui se retrouve avec une interface en anglais pendant quelques secondes ! Ca reste donc une solution « de l’extrême » pour ceux qui ont des problèmes de mémoire php.

/!  la ligne 377 a été modifiée par nos soins en rajoutant un @ devant la fonction mkdir car sur certains serveurs (le mien…) sous Cpanel la création des dossiers n’est pas acceptée selon les droits chmod. Le problème à été signalé.

Pour parer à ce problème, si les nouveaux dossiers ne sont pas créés automatiquement, avec votre logiciel FTP créez un dossier /wp-lang/ à la racine de votre site avec les droits chmod 775

Attention toutefois avant d’utiliser ce fichier : faite une sauvegarde de l’original avant de le remplacer par celui ci !

Ce fichier est utilisé sur cette plateforme avec succès et j’ai pu constater une véritable amélioration des performances de l’ensemble.

Merci à Xknown du forum français pour cette trouvaille, et à Naruto pour l’intégration du fichier  !