- 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
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-fpmeinfach als separaten Prozess laufen lassenund stattdessen eher einen FastCGI-Client in JS schreiben und es so verarbeiten.
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.
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