5 Punkte von xguru 2025-05-31 | 3 Kommentare | Auf WhatsApp teilen
  • Ein Modul, das PHP-Anwendungen innerhalb einer Node.js-Anwendung im selben Prozess ausführt und dadurch Kommunikation zwischen Node.js und PHP ohne Netzwerkverbindung ermöglicht
    • Bidirektionale Kommunikation, hybride Architekturen, die Nutzung von Legacy-PHP-Beständen und Migrationen werden dadurch vereinfacht
    • Damit lassen sich verschiedene hybride Web-App-Architekturen umsetzen, etwa die Integration von WordPress mit einem Next.js-Frontend
  • Unterstützt sowohl die asynchrone Methode (handleRequest) als auch die synchrone Methode (handleRequestSync) (die synchrone Methode blockiert den Node.js-Thread)
  • Unterstützt vorrangig x64 Linux und x64/arm64 macOS; die Installation einiger PHP-bezogener Systembibliotheken ist erforderlich
  • HTTP-Objekte wie Request/Response/Headers können direkt in Node.js erstellt und manipuliert werden, wodurch eine natürliche Integration mit PHP-Anwendungen möglich ist
  • Verwendung
    // Nach dem Erzeugen einer `Php`-Instanz wird die PHP-Anfrage mit `handleRequest()` verarbeitet  
    // Mit den Objekten `Request` und `Response` werden HTTP-Anfrage- und Antwortdaten direkt behandelt  
    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())  
    
  • Einsatzbeispiele
    • PHP-basierte CMS wie WordPress mit einem Node.js-Frontend wie Next.js integrieren oder Legacy-PHP-Apps schrittweise nach Node.js migrieren
    • Geeignet für In-Memory-Kommunikation ohne Netzwerk-Overhead zwischen beiden Umgebungen sowie für API-Gateways, SSR und die Anbindung benutzerdefinierter Backends
  • APIs
    • Php-Klasse
      • new Php(config): Konfigurationen wie docroot können enthalten sein
      • php.handleRequest(request): verarbeitet Anfragen asynchron (gibt ein Promise zurück)
      • php.handleRequestSync(request): synchrone Verarbeitung (blockiert den Thread)
    • Request-Klasse
      • HTTP-Methode, URL, Header und Body können angegeben werden
      • Direkter Zugriff auf die einzelnen Eigenschaften ist möglich (z. B. request.method, request.body)
    • Response-Klasse
      • Verfügt über Eigenschaften wie status, headers, body und log
      • Kann manuell erzeugt werden (nützlich für Tests und Fehlerbehandlung)
    • Headers-Klasse
      • Unterstützt verschiedene Methoden zur Verwaltung von HTTP-Headern wie set, add, get, getAll, has und delete
      • Header können über Iterator-APIs wie entries, keys, values und forEach gesammelt verarbeitet werden

3 Kommentare

 
nemorize 2025-05-31

Keine besonders attraktive Option ...

PHP verbraucht von Haus aus schon ziemlich viel Speicher, und auch die Initialisierungskosten sind recht hoch, sodass auf jeden Fall ein angemessenes Management nötig ist.
Im selben Prozess wie Node, insbesondere bei einer Struktur wie der aktuellen Implementierung, in der PHP vollständig in ein natives Modul eingebettet ist, wirkt die Belastung ziemlich groß.

Ich würde php-fpm einfach als separaten Prozess laufen lassen
und stattdessen eher einen FastCGI-Client in JS schreiben und es so verarbeiten.

 
letaem77a 2025-05-31

Ist diese Bibliothek mit der Node.js-Runtime von AWS Lambda gut kompatibel?

Falls ja, könnte man PHP letztlich vielleicht auch serverlos auf AWS Lambda betreiben.

 
savvykang 2025-05-31

Wenn es keinen Grund gibt, es parallel zu Node.js zu verwenden, können Sie auch die PHP-Laufzeit in Lambda bereitstellen: https://bref.sh