PHP 7 : Migrez !
AFUP Lyon - 23 mars 2016
@srogier /
srogier
Dernière version de php7 sortie en décembre (fonctionnalité + gain de perf)
Depuis sept et les premières RC, chez Decitre début de la préparation de la migration
J'ai dix minutes ce soir pour vous présenter ce que nous avons fait et sommes en train de faire pour la migration de decitre.fr
Je ne vous parlerai des nouvelles fonctionnalités, mais je vais vous parler des outils aidant à la migration vers php7 et des problèmes potentiels rencontrés de celle-ci. Pour plus d'informations
Tapez "s" pour ouvrir les notes de présentation.
Sondages express
- Qui a déjà testé ou développe avec PHP 7 ? (réponse : dizaine de personnes)
- Qui a éprévu de migrer vers PHP 7 ? (réponse : quizaine de personnes)
- Qui a déjà en prod une application PHP 7 ? (réponse : 2 :D )
Vous avez des tests unitaires ?
Et une couverture de code à 100% ?
Upgradez, lancez les tests et corrigez les erreurs
Mais dans la vraie vie, les projets ont rarement une couverture de code à 100%
Voir certains n'ont aucun test
Comment simplifier et fiabiliser sa migration vers PHP7 ? Migrer depuis 5.6 : RTFM !
http://php.net/manual/en/migration70.php
PHP fourni un guide de migration relativement complet avec
- les ruptures de compatibilité
- les nouvelles fonctionnalités
- les fonctionnalités supprimées/modifiés
- les changements de comportements
Comment identifier les incompatibilités dans les 300 000 lignes de mon code ?
PHP 7 Compatibility Checker
https://github.com/sstalle/php7cc
Outil de detection des erreurs et incompatibilité php7
Fonctionne à partir de PHP 5.3
Se base sur PHP Parser
Découpe le code en token et identifie les cas qui peuvent poser problème
Facilement installable via composer.phar en global et lançable dans un dossier
Parcourt tous les fichiers et remonte les erreurs potentielles ou non
Il ne reste plus qu'à corriger
Fastidieux, mais efficace.
220 alertes sur magento (code, magento, ZF) (certaines uniquement des alertes)
Contrôle des conditions de la rupture de compat non atteintes.
Très efficace : cf bug non listé
On a maintenant un code compatible avec php7. Mais comment le tester ? Docker, Vagrant, etc.
Vous avez le choix !
Images dipos, packages rpm et deb également
Apt-get update si vous voulez
On en a profité pour passer sur docker en dev et facilement basculer entre 5.6 et 7.0
Attention aux extensions PHP
https://github.com/gophp7/gophp7-ext/wiki/extensions-catalog
Toutes ne sont pas portées
Exemple de la nouvelle extension mongo vs legacy.
Etat des lieux des différentes extensions.
Attention des versions php7 ne sont pas forcément packagés, mais utilisable sur une branche (memcached par exemple).
Etape la plus compliquée et aléatoire de la migration Une migration peut en cacher une autre
Dans notre cas, passage de wheezy à jessie avec upgrade de version apache et varnish
afin de bénéficier des dernières versions maintenues
PHP7 ne sera peut-être pas le plus compliqué et révéler des surprises.
Mais au final, ça vaut le coup
Fiche produit
Panier
Wall time
-22 % (-320ms)
-13 % (-370ms)
CPU time
-23 % (-310ms)
-15 % (-390ms)
Memory
-41 % (-19Mb)
-41 % (-25Mb)
Chiffres basés sur l'environnment de dev.
Retard sur la migration car retardée par l'arrivée tardive de l'extension newrelic
Dans tous les cas, il est rare d’avoir en une seule upgrade un tel gain de perf
pour un coût de migration raisonnable.
Gain de perf pour gain d'infra
Donc allez-y ! Migrez !
Merci pour votre attention
Des questions ?
PHP 7 : Migrez !
AFUP Lyon - 23 mars 2016
@srogier /
srogier
Dernière version de php7 sortie en décembre (fonctionnalité + gain de perf)
Depuis sept et les premières RC, chez Decitre début de la préparation de la migration
J'ai dix minutes ce soir pour vous présenter ce que nous avons fait et sommes en train de faire pour la migration de decitre.fr
Je ne vous parlerai des nouvelles fonctionnalités, mais je vais vous parler des outils aidant à la migration vers php7 et des problèmes potentiels rencontrés de celle-ci.