- Executa aplicações PHP dentro da mesma process do aplicativo Node.js, permitindo comunicação entre Node.js e PHP sem conexão de rede
- Facilita comunicação bidirecional, arquiteturas híbridas, reaproveitamento de ativos legados em PHP e migração
- Com isso, é possível implementar diversas arquiteturas híbridas de aplicações web, como integrar o WordPress a um frontend em Next.js
- Suporta tanto o modo assíncrono (
handleRequest) quanto o modo síncrono (handleRequestSync) (o modo síncrono bloqueia a thread do Node.js)
- Dá suporte prioritário a ambientes x64 Linux, x64/arm64 macOS e requer a instalação de algumas bibliotecas de sistema relacionadas ao PHP
- Objetos HTTP como Request/Response/Headers podem ser criados e manipulados diretamente no Node.js, permitindo integração natural com aplicações PHP
- Como usar
// Após criar uma instância de `Php`, processe uma requisição PHP com `handleRequest()`
// Use os objetos `Request` e `Response` para lidar diretamente com os dados de requisição/resposta 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())
- Exemplos de uso
- Integrar um CMS baseado em PHP (como WordPress) a um frontend em Node.js (como Next.js), ou migrar gradualmente um app legado em PHP para Node.js
- Adequado para comunicação em memória entre os dois ambientes sem overhead de rede, além de integração com API gateway, SSR e backends personalizados
- APIs
- Classe
Php
new Php(config): pode incluir configurações como docroot
php.handleRequest(request): processa requisições assíncronas (retorna uma Promise)
php.handleRequestSync(request): processamento síncrono (bloqueia a thread)
- Classe
Request
- Permite definir método HTTP,
url, headers e body
- Cada propriedade pode ser acessada diretamente (ex.:
request.method, request.body)
- Classe
Response
- Possui propriedades como
status, headers, body e log
- Pode ser criada manualmente (útil para testes e tratamento de erros)
- Classe
Headers
- Suporta vários métodos de gerenciamento de cabeçalhos HTTP, como
set, add, get, getAll, has e delete
- Permite processamento em lote de cabeçalhos com APIs iteradoras como
entries, keys, values e forEach
3 comentários
Não me parece uma opção tão atraente assim...
O PHP já consome bastante memória por padrão, e o custo de inicialização também é bem alto, então uma gestão adequada é indispensável,
e, dentro do mesmo processo que o Node, especialmente numa estrutura como a implementação atual, que embute o PHP inteiro em um módulo nativo, isso parece aumentar bastante a sobrecarga.
Se fosse eu, deixaria o
php-fpmcomo um processo separadoe, em vez disso, implementaria um cliente FastCGI em JS para lidar com isso.
Essa biblioteca seria bem compatível com o runtime Node.js do AWS Lambda?
Se for compatível, acho que no fim daria até para rodar PHP no AWS Lambda de forma serverless.
Se não houver motivo para usar junto com Node.js, você também pode implantar o runtime do PHP no Lambda https://bref.sh