PHP 8.0 devrait être publié le 26 novembre 2020. En tant que langage de programmation alimentant les sites WordPress, la dernière version de PHP offre de nouvelles fonctionnalités que les développeurs trouveront utiles et des améliorations qui promettent d’améliorer considérablement la sécurité et les performances à long terme. Il supprime également complètement un certain nombre de fonctions précédemment obsolètes. PHP 8 est un changement massif par rapport aux versions précédentes.

Dans cet article, nous espérons fournir des informations détaillées sur ce que cela signifie pour les propriétaires de sites WordPress, y compris les stratégies d’adoption recommandées.

Dois-je mettre à jour tout de suite?

Non. La version majeure à venir de WordPress, la 5.6, est destinée à être «bêta compatible avec PHP 8» selon le 18 novembre Chat de développement WordPress. Cela signifie que la plupart des fonctionnalités de base de WordPress fonctionneront, mais des bogues inattendus peuvent encore survenir pendant un certain temps, même sans la présence de plugins ou de thèmes supplémentaires. WordPress a a appelé à des tests supplémentaires avec PHP 8 afin de trouver et de corriger autant de bogues restants que possible.

Chez Wordfence, notre équipe d’assurance qualité travaille pour s’assurer que notre plugin est compatible avec PHP 8 dans une variété d’environnements. Les prochaines versions de Wordfence offriront un niveau similaire de prise en charge partielle, bien que nous ayons prévu des tests supplémentaires pour atteindre une compatibilité totale.

Un grand nombre de plugins et de thèmes WordPress ne seront pas immédiatement compatibles avec PHP 8. Ceux qui ne rencontrent pas d’erreurs fatales lors d’une utilisation normale peuvent encore montrer un comportement inattendu pendant un certain temps.

Quels changements de rupture cela inclut-il?

Certains développeurs soutiennent depuis longtemps que PHP n’est pas sécurisé par défaut. Bien que cela fasse débat, il est vrai que les versions de PHP antérieures à PHP 8 sont plus tolérantes aux pannes et s’efforcent de garantir que le code fonctionnera même si des erreurs mineures sont présentes.

PHP 8 utilise un typage beaucoup plus strict que les versions précédentes. De nombreuses fonctions intégrées sont désormais plus sélectives sur les entrées qu’elles acceptent, et PHP 8 lui-même est plus strict sur la manière dont les entrées sont transmises aux fonctions. Les problèmes qui entraînaient auparavant des notifications entraînent désormais des avertissements, et les problèmes qui aboutissaient auparavant à des avertissements entraînent désormais des erreurs.

En d’autres termes, PHP 8 n’est pas aussi indulgent que les versions précédentes. Il n’essaiera pas aussi fort de faire fonctionner le code quoi qu’il arrive.

Certaines fonctions et fonctionnalités obsolètes dans PHP 7.x ont été complètement supprimées. Ceux-ci inclus:

  • le $php_errormsg variable
  • le create_function() fonction
  • le mbstring.func_overload directive ini
  • le real type
  • le allow_url_include directive ini
  • le restore_include_path() fonction
  • le each() fonction

Bien que la plupart d’entre eux ne soient plus largement utilisés, nous avons constaté que create_function est toujours utilisé dans plus de 5500 plugins WordPress, y compris des plugins extrêmement populaires avec des millions d’installations. Dans certains cas, l’utilisation de ces fonctions obsolètes peut être destinée à une compatibilité descendante avec les anciennes versions de PHP. Cependant, de nombreux plugins nécessiteront une refactorisation approfondie à mesure que PHP 8 sera de plus en plus utilisé.

De nombreux plugins et thèmes dépendent également fortement de bibliothèques tierces. Les développeurs WordPress peuvent avoir besoin d’attendre qu’ils soient mis à jour pour des raisons de compatibilité. Si ces bibliothèques ne sont pas maintenues ou mises à jour pour assurer la compatibilité avec PHP 8, il peut être nécessaire de bifurquer ces bibliothèques, de trouver des alternatives, ou même de réécrire les plugins et les thèmes à partir de zéro.

Pour plus d’informations sur ce qui a changé, nos amis de Yoast ont produit un excellent rapport de compatibilité destiné aux développeurs qui souhaitent s’assurer que leur logiciel est compatible.

Quels sont les problèmes de sécurité?

PHP autorise quelque chose appelé «jonglage de types». Cela signifie qu’il peut traiter les chaînes contenant des nombres de la même manière qu’il traite les entiers ou les flottants, et peut effectuer des calculs et faire des comparaisons entre ces différents types tant que l’opérateur de comparaison lâche == est utilisé à la place de l’opérateur de comparaison stricte ===. Pour les développeurs, le jonglage de type peut être très utile et gagner du temps lors de l’écriture de code, mais cela peut parfois conduire à un comportement inhabituel.

Un exemple classique de la façon dont le jonglage de types peut causer des problèmes est la comparaison 0==”blah” reviendra true. PHP 8 corrige ce type de comportement de sorte que ces comparaisons et d’autres similaires (par exemple, 0==”0blah”) reviendra false.

Dans l’ensemble, cela améliorera la sécurité. Il existe un certain nombre d’exploits qui peuvent tirer parti du comportement de type Juggling de PHP pour contourner les vérifications de cookies, de nonce ou de mots de passe non standard. Néanmoins, un grand nombre de plugins utilisent ces comparaisons vagues, parfois pour des fonctions critiques. Dans la plupart des cas, ceux-ci continueront à fonctionner correctement lors de l’utilisation de PHP 8, mais certains d’entre eux pourraient en fait s’appuyer sur un comportement incorrect pour fonctionner correctement. Dans quelques rares circonstances, cela peut ouvrir de nouvelles failles de sécurité.

La charge de la mise à jour du code pour la compatibilité avec PHP 8 pourrait s’avérer trop lourde pour certains développeurs, et de nombreux plugins et thèmes peuvent finir par être abandonnés, bien que cela soit moins susceptible de se produire pour les plugins et les thèmes avec une grande base d’installation. Tous les problèmes de sécurité dans ces plugins et thèmes abandonnés ne seraient pas corrigés, ce qui pourrait s’avérer désastreux.

De même, de nombreux sites Web peuvent rester sur une version non sécurisée de PHP afin de maintenir leurs anciens plugins en cours d’exécution.

Enfin, certaines souches de malwares s’appuient sur des fonctions obsolètes ainsi que sur la tolérance aux pannes de PHP afin de masquer leurs intentions. Ces souches cesseront de fonctionner ou deviendront plus visibles dans un environnement PHP 8, mais les auteurs de malwares s’adapteront avec le temps.

Quels changements de performances sont à venir?

Une fonctionnalité potentiellement intéressante à venir dans PHP 8 est JIT, ou compilation «Just In Time». PHP est un langage interprété, ce qui signifie qu’il est traduit en code machine lors de son exécution. JIT garde une trace du code fréquemment utilisé et tente d’optimiser la traduction du code automatique afin qu’il puisse être réutilisé. Cela peut entraîner une amélioration massive des performances pour des fonctionnalités spécifiques.

L’ajout de JIT à d’autres langages, tels que JavaScript, a historiquement conduit à une explosion de nouvelles applications. Par exemple, les machines virtuelles fonctionnant en JavaScript auraient été inimaginables dans les premiers jours du Web. Certaines tâches qui auraient nécessité l’installation d’un module sur le serveur dans le passé deviendront pratiques en utilisant des bibliothèques PHP pures.

Pour le moment, cependant, l’amélioration réelle des performances des applications Web telles que WordPress est minime et il faudra beaucoup de temps avant que l’utilisateur ou le développeur WordPress moyen ne profite des avantages de cette nouvelle fonctionnalité.

Bien qu’il existe de nombreuses autres nouvelles fonctionnalités pour faciliter la vie des développeurs, il est peu probable que celles-ci soient utilisées dans les plugins et les thèmes WordPress dans un avenir prévisible, car la plupart briseraient la rétrocompatibilité avec les versions antérieures de PHP encore utilisées par de nombreux sites WordPress. .

Combien de temps les développeurs doivent-ils mettre à jour?

Chaque version de PHP a un cycle de vie de 2 ans pendant lequel les bogues sont corrigés, et une année supplémentaire pendant laquelle les problèmes de sécurité sont corrigés. PHP 7.4 est sorti en novembre 2019. En tant que version finale de PHP 7, cela signifie que les bogues de PHP 7.4 seront corrigés jusqu’en novembre 2021, et les problèmes de sécurité seront corrigés jusqu’en novembre 2022, date à laquelle il atteindra son ” Fin de vie”. Cela signifie que novembre 2022 peut être considéré comme une date limite absolue: tout le code PHP doit être compatible avec PHP 8.0 au minimum à cette date, ou risquer d’être bloqué sur une version potentiellement vulnérable de PHP.

Conclusion

La transition vers PHP 8 est l’un des changements les plus larges et les plus percutants que le langage ait jamais connus. Bien que cela en vaudra la peine à long terme, les propriétaires et les développeurs de sites WordPress peuvent être confrontés à des difficultés à court terme. Si vous êtes propriétaire d’un site Web, commencez à garder un œil vigilant sur les plugins et thèmes qui sont mis à jour ou testés pour la compatibilité et planifiez de remplacer ceux qui ne le sont pas. Si vous êtes un développeur, commencez à tester votre code et toutes les dépendances sur PHP 8, si vous ne l’êtes pas déjà, et commencez à faire un plan pour bifurquer ou remplacer les bibliothèques qui ne sont pas mises à jour. L’écosystème WordPress a traversé des transitions difficiles dans le passé, et notre communauté open source s’est toujours développée et adaptée.

Un merci spécial au responsable QA Matt Rusnak et au développeur principal Matt Barry pour leur aide avec cet article.


Source link