migrations php 5 - solutions linux 2009
DESCRIPTION
TRANSCRIPT
Programmation objet
• La grande avancée de PHP 5
• Tous les ajouts sont facultatifs
• Le code PHP 4 est compatible
• Sauf .... le passage par copie des objets
La différence
function mod( $obj ) { $obj->test = ‘in’ ; }
$obj = new StdClass() ;$obj->test = ‘out’ ;
mod( $obj ) ;
echo $obj->test ; // in ou out ?
Code déjà compatible ?
• Passage par référence explicite en PHP 4
• On utilise & (attention à ne pas en oublier)
• Compatible PHP 5 sans modification
• mais désactivation des erreurs strictes
Code non compatible ?
• zend.ze1_compatibility_mode = true
• interdit d’utiliser les nouveautés PHP 5
• stabilité non garantie
• Sinon : corriger votre code
• long, complexe, sans garantie de résultat
Problème
• Il n’y a aucune erreur de syntaxe
• Le code semble fonctionner
• Parfois ça fonctionne, d’autres pas
• Il faut comprendre le code pour le corriger
• Demande des tests exhaustifs
Corriger le code ?
• En haut de script :ini_set(‘zend.ze1_compatibility_mode’, ‘1’);
• Dans chaque classe :function __clone() { ...debug_backtrace()... }
• Vérification ligne à ligne des résultats
• remplacer si nécessaire par “clone”
MySQL
• Officiellement remplacé par mysqli et pdo
• Non compatible builtin avec MySQL > 4.1
• Chercher : “mysql_connect”
MySQL : solution
• Créer un utilisateur “spécifique PHP 4”
• Utiliser l’ancien système de mot de passe
• old_password() dans mysql à la création
• Mixer avec pdo/mysqli ?
• demande + de ressources (deux liens)
XML
• domxml et domxslt ont disparu
• remplacé par dom et xsl
• chercher “domxml” et “domdocument”
• Script d’émulation :http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
La Migration
• Lire la documentation officielle, les livres
• Préparer un jeu de test exhaustif
• Choisir entre
• activer le mode de compatibilité
• passer réellement en php 5
Migration : avant
• Faire un code PHP 4 compatible
• pear::compat, dbal, mise à jour des libs
• Préparer les dev PHP 5
• garder une norme de codage PHP 4(minuscules, extension mysql, etc.)
Migration : pendant
• Aucune solution parfaite :-(
• Préparer
• Faire des tests
• Corriger
• Faire des tests
• Corriger
• Faire des tests ...
Migration : après
• Régler les niveaux d’erreur (E_STRICT)
• Récupérer l’ancienne configuration php.ini
• Attention aux données partagées
• utilisateurs mysql (old_password)
• données sérialisées
• bibliothèques de code