Quand on parle d’excellence technologique, on pense à des événements incontournables qui nourrissent notre passion pour la tech. Cette année, j’ai fièrement représenté Webnet au Forum PHP 2024, qui s’est tenu les 10 et 11 octobre à l’hôtel New York – The Art of Marvel, à Disneyland Paris. Cet événement emblématique, organisé par l’AFUP, a réuni près de 800 experts et passionnés de PHP, offrant un cadre exceptionnel pour explorer les dernières avancées technologiques.
Le Forum PHP 2024 a proposé un programme riche avec plus de 30 conférences et des ateliers spécialisés, couvrant un large éventail de sujets adaptés à tous les niveaux, du grand public aux experts confirmés. Pour moi, l’événement a été une immersion totale dans l’univers PHP, avec des échanges enrichissants et des découvertes inspirantes, donnant un aperçu des tendances et innovations qui façonneront le futur du développement.
Fidèle à son engagement écologique, le Forum a également mis en place des initiatives concrètes pour réduire son empreinte carbone, avec une certification argent et un objectif zéro déchet. À travers cet article, on revient sur les moments forts de cette édition, partageant les enseignements et les expériences qui enrichissent notre expertise et notre engagement envers la communauté PHP.
Créer sa Malware Sandbox en PHP
Alexandre Daubois, expert et Lead Développeur Symfony, a présenté une conférence sur la création d’une Malware Sandbox en PHP. Avec un focus sur la sécurité des fichiers uploadés, il a expliqué comment isoler et analyser des malwares potentiels sans recourir à des solutions coûteuses.
En détaillant des vérifications comme les Magic bytes et la prévention de traversée de répertoires, Alexandre a démontré comment PHP peut être utilisé pour renforcer la cybersécurité. Il a exploré plusieurs méthodes, incluant la création d’une sandbox avec des vérifications avancées, offrant une alternative économique pour protéger les systèmes contre des fichiers malveillants.
Malgré la pertinence du sujet, la solution proposée nous a semblé simpliste, et un approfondissement technique aurait été attendu pour répondre aux attentes d’une audience experte en cybersécurité.
En conclusion, Alexandre a indiqué que pour des besoins plus complexes, des solutions comme ClamAV peuvent être utilisées, offrant des fonctionnalités de sécurité plus poussées.
Les nouveautés dans Symfony 7.x
Lors de cette conférence, Nicolas Grekas a présenté les nouveautés et évolutions de Symfony 7.x, un cycle marquant l’adoption de PHP 8.2 comme version minimale. Il a insisté sur l’importance de la mise à jour régulière des dépendances, soulignant la nécessité pour les équipes de développement de maintenir leurs projets en phase avec les nouvelles pratiques du Framework.
Nicolas a introduit des améliorations comme l’intégration de PHPUnit 11 (remplaçant le ‘phpunit-bridge’) et des nouveaux attributs #[Map(*)] et #[WhenNot], facilitant le mappage de données et la gestion des environnements (dev, test, prod). Il a également abordé l’ajout de connecteurs innovants comme JoliNotif pour les notifications desktop, ainsi que l’évolution des composants existants, comme Console, qui inclura la gestion des signaux d’alarmes via des événements dédiés (`ConsoleAlarmEvent`).
Le conférencier a aussi évoqué les futurs composants envisagés, tels que ObjectMapper, JsonEncoder, et FeatureFlags, qui montrent une volonté d’adapter Symfony aux besoins croissants en développement moderne. Enfin, il a détaillé des solutions aux conflits potentiels avec des outils comme API Platform, en introduisant la possibilité d’avoir des serializers nommés pour une meilleure gestion des normalizers.
Cette conférence a offert un panorama complet des innovations et des bonnes pratiques à adopter pour les développeurs souhaitant tirer parti de Symfony 7.x.
PHP/Parallel : Accélérer sensiblement ses temps d’exécution
Thierry Kauffmann nous a offert une présentation technique passionnante sur l’orchestration de serveurs via PHP/Parallel dans le cadre du projet DiViM-S, développé pour le ministère de l’Éducation Nationale. Le défi : gérer dynamiquement jusqu’à 150 serveurs BigBlueButton en fonction du nombre de participants.
Thierry a souligné l’importance du parallélisme pour réduire les temps de réponse et optimiser l’utilisation des ressources. Grâce à l’extension PHP/Parallel, il a démontré que PHP peut désormais gérer des traitements multi-threadés de manière efficace.
En parallèle, il a abordé les défis techniques : la compilation de PHP en mode thread-safe (ZTS), la gestion des threads via Docker, et l’utilisation de frameworks comme ReactPHP et Amphp pour répondre à des besoins spécifiques. Thierry a aussi présenté FrankenPHP, une alternative permettant une compatibilité native avec l’extension Parallel.
Liens utiles :
– [DiViM-S sur GitHub, nouvel onglet]
– [PHP/Parallel Documentation, nouvel onglet]
Thierry a conclu en expliquant comment l’outil, désormais disponible via FrankenPHP, facilite l’adoption du multi-threading dans les projets PHP à grande échelle.
throw new Exception(); Oui mais laquelle ?!
Olivier Dolbeau a exploré les bonnes pratiques autour de la gestion des exceptions. Il a expliqué qu’une exception n’est pas un bug, mais un mécanisme permettant de gérer des situations exceptionnelles. Olivier a distingué deux approches selon que l’on travaille sur une bibliothèque ou un projet final : dans une bibliothèque, les exceptions doivent être cohérentes et interopérables via des interfaces communes, tandis que dans un projet final, il est préférable de ne gérer que les erreurs utiles et prévues.
Il a recommandé de privilégier les exceptions déjà existantes ou propres aux bibliothèques utilisées, et de créer des exceptions spécifiques uniquement si nécessaire. Enfin, il a conclu en soulignant qu’il n’est pas toujours indispensable de tout capturer, comme lorsqu’une erreur 500 est causée par un problème de base de données.
PMU: un plugin composer pour la gestion de Monorepository en PHP
Dans son talk, Antoine Bluchet a présenté un nouvel outil destiné aux développeurs PHP qui doivent gérer des monorepos, un concept répandu dans des environnements JavaScript avec des outils comme Lerna ou Nx. Il a comparé les alternatives existantes avant de développer PMU, un plugin pour Composer facilitant la gestion des dépendances, l’exécution de scripts, et la gestion de versions pour plusieurs projets. Une des fonctionnalités phares est le Project Linking, qui simplifie l’organisation des projets au sein d’un même dépôt.
How to Eliminate Waste in your Development Process
Dans sa conférence « How to Eliminate Waste in your Development Process« , Matthias Noback a mis en lumière les gaspillages fréquents dans les processus de développement, tels que les tâches non terminées ou les tests bloquants. Il a proposé des solutions pour maximiser l’efficacité des équipes, en mettant en avant le travail collaboratif, notamment le pair-programming et mob-programming, qui permettent de détecter plus rapidement les pertes de temps. Noback a également souligné l’importance de la Continuous Delivery, qui élimine les retards en garantissant que la valeur créée par les développeurs est livrée sans blocages inutiles.
L’objectif est de fluidifier les processus de travail en réduisant les contraintes inutiles et les inefficacités, souvent dues à des formalismes excessifs. Pour cela, il a recommandé d’adopter des méthodes telles que la méthode Scrum ou la méthode Mikado, tout en s’assurant que chaque étape du cycle de développement soit optimisée pour la livraison de valeur rapide et efficace. Noback a aussi mis en garde contre les mauvaises pratiques, comme les PR bloquées pendant trop longtemps ou les tests non fiables, qui engendrent du gaspillage au sein des équipes.
Gérer des gros volumes de données avec PHP
Lors de sa présentation, Joël Wurtz a partagé des stratégies pratiques pour gérer efficacement de gros volumes de données en PHP, en se concentrant sur l’optimisation et la simplification des processus. Un cas concret abordé était l’importation de catalogues de produits dans une marketplace. Face à d’énormes fichiers CSV dont la majorité des lignes ne changeaient pas d’une mise à jour à l’autre, Joël a proposé d’utiliser des techniques comme le calcul de hash sur chaque ligne et les jointures SQL pour identifier les lignes modifiées, ce qui permet d’importer uniquement les données nouvelles ou modifiées. Cela réduit la charge sur le serveur tout en optimisant les performances.
Dans le cadre du projet redirection.io, il a également montré comment les générateurs PHP et les flux de données streamés peuvent considérablement réduire la consommation de mémoire tout en simplifiant l’architecture. En éliminant certaines couches de cache devenues inutiles, cette approche permet une meilleure scalabilité et des performances accrues.
La conclusion essentielle de sa présentation est que chaque solution doit être adaptée à la compréhension précise du besoin, car il n’existe pas de solution universelle pour traiter de gros volumes de données.
Créer des interfaces d’administration rapidement avec Symfony UX et Sylius
Lors de sa conférence, Loïc Frémont, membre de l’équipe core de Sylius, a présenté une approche moderne et optimisée pour créer des interfaces administratives sans le besoin d’intégrer toute la partie e-commerce de Sylius.
En utilisant des composants comme Sylius Grid et le système de ressources Sylius, il a montré comment, grâce à Symfony UX et Twig Hooks, il est possible de développer des interfaces puissantes et flexibles pour des projets non-e-commerce. La présentation s’est également penchée sur Monofony, une solution qui permet de profiter des fonctionnalités de Sylius, sans la complexité liée à l’e-commerce.
L’une des démos marquantes a illustré la gestion de conférenciers avec Symfony UX et Sylius Resource, en automatisant la création d’entités, de formulaires, et de grids pour faciliter le développement d’interfaces administratives personnalisables. Le composant ux_autocomplete a également été évoqué pour rendre l’expérience utilisateur plus fluide en ajoutant des champs d’autocomplétion aux filtres.
Bien que la documentation ne soit pas encore disponible, le code est prêt à être intégré dans des projets Symfony.
Les objets paresseux en PHP
Lors de sa seconde conférence au Forum PHP 2024, Nicolas Grekas a approfondi le concept des objets paresseux en PHP, une technique qui retarde l’initialisation des objets jusqu’à ce qu’ils soient utilisés. Cette approche, déjà couramment utilisée dans Symfony et Doctrine, sera intégrée nativement dans PHP 8.4, permettant un contrôle plus précis via des mécanismes comme `newLazyGhost`, qui empêche l’initialisation immédiate des classes. Nicolas a exploré plusieurs méthodes de lazy loading, notamment les Ghost Objects et les Virtual Proxies, avec un accent sur les avantages en termes de performance et d’optimisation mémoire.
Ces concepts permettent d’éviter de surcharger inutilement la mémoire et de mieux gérer les services complexes, comme les gestionnaires d’entités ou les services finalisés. Le lazy loading aide également à résoudre les problèmes de dépendances circulaires tout en rendant le code plus efficace.
Grekas a aussi partagé l’évolution des techniques paresseuses, en les reliant à des stratégies définies par Martin Fowler:
- Lazy Initialization : Un objet n’est initialisé que s’il est appelé, ce qui permet d’économiser des ressources.
- Value Holders : Une classe ou méthode n’est invoquée qu’en cas de nécessité.
- Virtual Proxy : Un objet proxy remplace temporairement l’objet réel jusqu’à ce que l’appel direct soit nécessaire, tout en restant transparent.
- Ghost Objects : Utilisation des méthodes magiques et de l’héritage pour charger l’objet progressivement, un mécanisme utilisé dans Symfony et Doctrine.
Avec l’arrivée de PHP 8.4, ces optimisations seront accessibles directement, sans passer par des librairies tierces. Cela améliorera la gestion des classes finales, tout en optimisant la performance et simplifiant la structure du code. En somme, cette évolution ouvrira de nouvelles perspectives d’optimisation dans les projets PHP, notamment en termes de scalabilité et d’efficacité mémoire.
En conclusion, cette conférence a mis en lumière non seulement l’importance des objets paresseux dans les applications modernes, mais aussi les bénéfices que les développeurs pourront tirer des futures versions de PHP.
L’Orienté Objet au Cœur du Templating Symfony : Découvrez TwigComponent et LiveComponent
Félix Eymonot a dévoilé la puissance des TwigComponent et LiveComponent pour structurer les interfaces Symfony avec une approche orientée objet.
Les TwigComponent permettent de modulariser les templates en créant des composants individuels, chacun étant associé à une classe PHP responsable de ses données. Cette séparation favorise la réutilisabilité, l’encapsulation et la modularité, rendant le code des templates plus propre et maintenable. Ces composants offrent aussi un passage de paramètres facile, avec des propriétés publiques accessibles depuis Twig, et des valeurs par défaut configurables.
Eymonot a ensuite introduit les LiveComponent, inspirés de Livewire, qui apportent de la réactivité aux templates en actualisant les données en temps réel, sans rechargement de page. Cela permet une expérience utilisateur plus fluide avec des actions interactives, idéales pour les interfaces dynamiques.
Avec Symfony UX et les assets mapper, ces outils transforment l’expérience de templating pour les développeurs, améliorant la sécurité, la performance et l’intégration front-end.
Découverte de Castor : Le Task Runner PHP qui Simplifie votre Workflow
Lors de sa présentation au Forum PHP, Grégoire Pineau a captivé l’audience avec Castor, un task runner innovant pensé spécifiquement pour les développeurs PHP. Contrairement aux outils Makefiles souvent utilisés, qui, bien que puissants, peuvent poser des problèmes de complexité, Castor est intuitif et orienté vers les développeurs PHP en exploitant leurs compétences natives et des composants comme la réflexion PHP et les attributs Symfony.
Castor est conçu pour rendre le développement plus fluide en exécutant des tâches automatisées sans complexité excessive. Que ce soit pour des tests, des déploiements ou la génération de documentation, Castor permet aux développeurs de créer, organiser et exécuter leurs tâches en PHP, optimisant ainsi la productivité dans les workflows modernes. Il gère facilement des opérations comme l’écoute de changements de fichiers (mode watch), l’exécution parallèle de tâches, l’interaction avec des API, la connexion SSH, l’écriture de YAML, et même le cache, le tout sans dépendances supplémentaires.
En plus de sa simplicité, Castor a un autre atout : la portabilité. Dans les environnements où PHP n’est pas installé par défaut (par exemple, sur des serveurs de CI/CD), les scripts Castor peuvent être compilés sous forme de binaires autonomes grâce à `static-php-cli`. Cela signifie que vous pouvez exécuter des scripts PHP pour l’automatisation de tâches même sans PHP installé, en transférant simplement un binaire statique sur l’hôte de destination. Cette capacité garantit que vos tâches automatisées fonctionneront de manière fiable et portable.
Avec Castor, Grégoire Pineau offre un outil puissant et accessible, résolvant bien des maux de tête pour les développeurs PHP et redéfinissant l’expérience de développement pour les projets modernes.
Le Zéro Downtime Deployment en pratique
Smaïne Milianni, Engineering Manager chez Yousign, a animé une session captivante sur le Zéro Downtime Deployment (ZDD), une technique qui permet de déployer des mises en production sans interruption pour l’utilisateur. Avec le ZDD, finies les mises à jour en horaires décalés : l’équipe déploie sereinement à toute heure, garantissant une expérience utilisateur fluide.
Il a commencé par la technique du blue-green deployment, où la version n+1 est déployée sur un seul serveur avec un échantillon de trafic. Cette méthode garantit le bon fonctionnement avant de transférer tout le trafic sur la nouvelle version. Outre la fiabilité des mises en production, cette approche simplifie les rollbacks en cas de souci.
Smaïne a aussi souligné deux principes fondamentaux du ZDD : la compatibilité ascendante et la gestion progressive des modifications. Par exemple, l’ajout d’une colonne not nullable à une base de données se fait en deux étapes, d’abord en mode nullable, puis en mode contraint une fois les valeurs initialisées.
Pour gérer les queues et message brokers comme RabbitMQ, il a précisé qu’il est souvent nécessaire de suspendre temporairement les workers pendant le déploiement pour éviter les erreurs de désérialisation, surtout si l’on ajoute une propriété aux messages.
Enfin, Milianni a abordé les outils développés par Yousign, comme `safe-migrations` et `zdd-message-bundle`, qui permettent de vérifier si les migrations sont ZDD-compliant. Il a souligné que le ZDD reste pertinent pour des déploiements fréquents et fluides. Pour les changements critiques, une planification reste essentielle, et il est important de documenter les processus pour une adoption optimale par les équipes.
Conclusion
En somme, le Forum PHP 2024 a été une expérience enrichissante, rassemblant des experts et des passionnés autour des évolutions du langage PHP, des nouvelles pratiques de déploiement, des outils de productivité et des méthodes de structuration de projets. Entre innovations, échanges et retours d’expérience, cet événement a permis à chacun d’enrichir ses compétences et d’envisager des approches encore plus performantes pour le développement et la maintenance d’applications. Avec les connaissances partagées, nous revenons inspirés et mieux équipés pour relever les défis technologiques de demain.