dimanche 23 août 2015

Migrer vers Php 5.4 depuis une version antérieure

On sait depuis quelques mois qu'Ovh va rendre obsolètes sur ses hébergements mutualisés toutes les versions de Php antérieures à 5.4.

Cela fait un peu plus de 15 ans que je développe des sites et des applications internet basées sur ce langage. Certaines tournent sur des serveurs locaux mais la plupart sont sur des hébergements mutualisés ou sur des VPS chez Ovh.
Pour les mutualisés on sait qu'ils passeront automatiquement à Php 5.4 en septembre.
Pour les VPS rien n'est annoncé concernant les serveurs en production mais pour les nouveaux, les distributions proposées semblent disposer au moins de Php 5.5.

Si mes scripts les plus récents sont déjà en Php 5.5, il en reste un certain nombre dans des versions antérieures et même en Php 4. Il adonc bien fallu que je me penche sérieusement sur le sujet et voici une petite liste non exhaustive des principaux changements et des choses à vérifier/corriger lorsque l'on migre vers Php 5.4 depuis une version antérieure.

  • La directive register_globals disparaît :

    A mon avis c'est le changement le plus important si vous ne l'avez pas anticipé. Il y a longtemps la valeur par défaut de register_globals était On. Avec Php 4.2 cette valeur par défaut est passée à Off mais jusqu'à la version 5.3 on pouvait encore la changer pour mettre à On. Depuis Php 5.4 cette directive disparaît et Php se comporte automatiquement comme si elle valait Off.
    Donc si malgré tous les avertissements à ce sujet vous avez encore des scripts dont les variables sont automatiquement initialisées avec les paramètres (GET ou POST) de la requête qui les appelle, ils ne vont plus fonctionner en Php 5.4.

  • Les magic_quotes disparaissent :

    Cela concerne aussi bien les magic_quotes_gpc que les magic_quotes_runtime donc pensez bien à vérifier comment sont traités les guillemets simples ou doubles dans vos données externes.

  • Attention à l'encoding des fonctions du type htmlspecialchars :

    Les principales fonctions concernées sont htmlspecialchars, htmlspecialchars_decode, html_entities, html_entity_decode, get_html_translation_table et il faut bien reconnaître que l'évolution de la valeur par défaut du paramètre optionnel encoding a de quoi prêter à confusion.

  • Obsolescence annoncée de l'extension MySQL :

    Si vous utilisez encore l'ancienne extension MySQL pour accéder à vos bases de données, il est grand temps de passer à MySQLi car MySQL est obsolète à partir de Php 5.5 et sera supprimée prochainement.