- Un módulo que ejecuta aplicaciones PHP dentro de una aplicación Node.js en el mismo proceso, lo que permite la comunicación entre Node.js y PHP sin conexión de red
- Facilita la comunicación bidireccional, las arquitecturas híbridas, el aprovechamiento de activos heredados en PHP y la migración
- Con esto se pueden implementar diversas arquitecturas de aplicaciones web híbridas, como integrar WordPress con un frontend en Next.js
- Soporta tanto el modo asíncrono (
handleRequest) como el sincrónico (handleRequestSync) (el modo sincrónico bloquea el hilo de Node.js)
- Da soporte prioritario a entornos x64 Linux y x64/arm64 macOS, y requiere la instalación de algunas bibliotecas del sistema relacionadas con PHP
- Objetos HTTP como Request/Response/Headers pueden crearse y manipularse directamente desde Node.js, lo que permite una integración natural con aplicaciones PHP
- Cómo usarlo
// Crear una instancia de `Php` y procesar una solicitud PHP con `handleRequest()`
// Usar los objetos `Request` y `Response` para manejar directamente los datos HTTP de solicitud/respuesta
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())
- Ejemplos de uso
- Integrar un CMS basado en PHP (como WordPress) con un frontend en Node.js (como Next.js), o migrar gradualmente una app heredada en PHP hacia Node.js
- Adecuado para implementar comunicación en memoria entre ambos entornos sin sobrecarga de red, así como para API gateways, SSR e integración con backends personalizados
- APIs
- Clase
Php
new Php(config): puede incluir configuraciones como docroot
php.handleRequest(request): procesa solicitudes de forma asíncrona (devuelve una Promise)
php.handleRequestSync(request): procesamiento sincrónico (bloquea el hilo)
- Clase
Request
- Permite definir
method, url, headers y body HTTP
- Se puede acceder directamente a cada propiedad (ej.:
request.method, request.body)
- Clase
Response
- Tiene propiedades como
status, headers, body y log
- Puede crearse manualmente (útil para pruebas y manejo de errores)
- Clase
Headers
- Soporta varios métodos para gestionar encabezados HTTP, como
set, add, get, getAll, has y delete
- Permite procesar encabezados en lote con APIs iteradoras como
entries, keys, values y forEach
3 comentarios
No parece una opción muy atractiva...
PHP de por sí consume bastante memoria, y el costo de inicialización también es bastante alto, así que requiere una gestión adecuada sí o sí. Dentro del mismo proceso que Node, especialmente con una estructura como la implementación actual, donde PHP está metido completo dentro de un módulo nativo, da la impresión de que la carga sería bastante grande.
Yo simplemente dejaría
php-fpmcomo un proceso separado, y más bien escribiría el cliente FastCGI en JS para manejarlo así.¿Esta biblioteca será bien compatible con el runtime de Node.js de AWS Lambda?
Si lo fuera, parece que al final incluso se podría ejecutar PHP en AWS Lambda de forma serverless.
Si no hay una razón para usarlo en paralelo con Node.js, también pueden desplegar el runtime de PHP en Lambda: https://bref.sh