5 pontos por xguru 2025-05-31 | 3 comentários | Compartilhar no WhatsApp
  • 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

 
nemorize 2025-05-31

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-fpm como um processo separado
e, em vez disso, implementaria um cliente FastCGI em JS para lidar com isso.

 
letaem77a 2025-05-31

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.

 
savvykang 2025-05-31

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