5 points par xguru 2025-05-31 | 3 commentaires | Partager sur WhatsApp
  • Un module qui permet d’exécuter une application PHP dans le même processus qu’une application Node.js, rendant possible une communication entre Node.js et PHP sans connexion réseau
    • Cela facilite la communication bidirectionnelle, les architectures hybrides, la réutilisation des actifs PHP legacy et les migrations
    • Cela permet de mettre en œuvre diverses architectures d’applications web hybrides, comme l’intégration de WordPress avec un frontend Next.js
  • Prend en charge à la fois le mode asynchrone (handleRequest) et le mode synchrone (handleRequestSync) (le mode synchrone bloque le thread Node.js)
  • Prend en charge en priorité les environnements x64 Linux et x64/arm64 macOS, avec installation requise de certaines bibliothèques système liées à PHP
  • Les objets HTTP comme Request/Response/Headers peuvent être créés et manipulés directement dans Node.js pour une intégration naturelle avec l’application PHP
  • Utilisation
    // Après avoir créé une instance de `Php`, traiter une requête PHP avec `handleRequest()`  
    // Utiliser les objets `Request` et `Response` pour manipuler directement les données de requête/réponse HTTP  
    import { Php, Request } from '@platformatic/php-node'  
    
    const php = new Php()  
    const request = new Request({  
      url: 'http://example.com/foo/bar',  
      headers: { 'X-Test': ['Hello, from Node.js!'] }  
    })  
    const response = await php.handleRequest(request)  
    console.log(response.body.toString())  
    
  • Exemples d’usage
    • Intégrer un CMS PHP (comme WordPress) à un frontend Node.js (comme Next.js), ou migrer progressivement une application PHP legacy vers Node.js
    • Convient à la communication en mémoire entre les deux environnements sans surcharge réseau, ainsi qu’aux API gateways, au SSR et à l’intégration de backends personnalisés
  • APIs
    • Classe Php
      • new Php(config) : peut inclure des paramètres comme docroot
      • php.handleRequest(request) : traitement asynchrone d’une requête (retourne une Promise)
      • php.handleRequestSync(request) : traitement synchrone (bloque le thread)
    • Classe Request
      • Permet de définir la méthode HTTP, l’URL, les headers et le body
      • Accès direct à chaque propriété possible (ex. : request.method, request.body)
    • Classe Response
      • Contient des propriétés comme status, headers, body, log, etc.
      • Peut être créée manuellement (utile pour les tests et la gestion des erreurs)
    • Classe Headers
      • Prend en charge diverses méthodes de gestion des headers HTTP comme set, add, get, getAll, has, delete
      • Permet un traitement groupé des headers via les API d’itérateur comme entries, keys, values, forEach

3 commentaires

 
nemorize 2025-05-31

Ce n’est pas une option très séduisante...

PHP consomme déjà pas mal de mémoire par défaut, et son coût d’initialisation est aussi assez élevé, donc il faut absolument une gestion adaptée. Dans le même processus que Node, surtout avec une structure comme l’implémentation actuelle où PHP est embarqué en bloc dans un module natif, la charge me paraît devenir assez importante.

À ma place, je laisserais simplement php-fpm dans un processus séparé, et j’écrirais plutôt un client FastCGI en JS pour le gérer.

 
letaem77a 2025-05-31

Cette bibliothèque serait-elle bien compatible avec le runtime Node.js d’AWS Lambda ?

Si oui, on pourrait peut-être au final faire tourner PHP en mode serverless sur AWS Lambda.

 
savvykang 2025-05-31

S’il n’y a pas de raison de l’utiliser en parallèle avec Node.js, vous pouvez aussi déployer un runtime PHP sur Lambda : https://bref.sh