La directive PHP register_long_arrays

Si il vous arrive de migrer des script PHP3 ou PHP4 depuis d’anciens serveurs, la directive de configuration PHP5 register_long_arrays risque de vous poser quelques petits problèmes de compatibilité avec les anciennes variables super-globales $HTTP_*_VARS


Quel est le problème ?

La directive register_long_arrays, apparue avec PHP5 dans le fichier php.ini, permet d’activer ou de désactiver ces anciennes variables $HTTP_*_VARS telles que $HTTP_GET_VARS et $HTTP_POST_VARS, qui ont été respectivement remplacées par $_GET et $_POST.

Avec PHP5, la directive register_long_arrays est positionnée à « off»  par défaut, ce qui a pour effet d’empêcher l’enregistrement des variables longues comme $HTTP_SERVER_NAME

Or, de nombreux scripts PHP libres comme OSCommerce MS2.2 utilisent les variables super-globales $HTTP_*_VARS dans leur code source.

Heureusement il existe un plugin OSCommerce qui permet de corriger ce problème. Très utile losqu’on n’a pas accès à la configuration globale de PHP sur le serveur (voir Install with register_long_arrays set to OFF) !

Aucun script utilisant les variables super-globales longues ne fonctionnera correctement avec une version de PHP5 dont la directive de configuration register_long_arrays est positionnée à « off« .

La solution…

Si vous n’avez pas accès au fichier php.ini du serveur sur lequel vous travaillez, la seule solution est de modifier les sources et de remplacer toutes les références à des variables super-globales obsolètes $HTTP_*_VARS

Si vous avez accès au fichier de configuration PHP, il peut être utile de remplacer temporairement la ligne :

register_long_arrays = Off

par :

register_long_arrays = On

Après redémarrage d’Apache, cette manipulation permet de réactiver les variables $HTTP_*_VARS, le temps de corriger vos scripts…

Tags : , ,

Laisser un commentaire