Tenho visto muitas requisições ultimamente, sobre como rodar PHP no Node.js. Algumas requisições têm sido porque as pessoas não sabem como fazer as mesmas coisas em Node.js como fazem facilmente em PHP, e outras requisições têm sido porque precisam trabalhar em conjunto com outras equipes que só programam em PHP.

Em todos os casos eu vi a resposta, que não pode ser feita. O que é factualmente impreciso. Como você pode executar o PHP na linha de comando, e o Node.js pode facilmente executar programas através da linha de comando, é muito possível.

Quais são os benefícios?

  • Fácil colaboração entre equipes com diferentes conhecimentos
  • PHP é realmente bom em lançar scripts rápidos juntos
  • Não há necessidade de executar vários servidores se ambos Node.js e PHP são necessários

Quais são os inconvenientes?

  • Mais possibilidades para violações de segurança
  • Não muito bom desempenho
  • Fácil para atirar no pé
  • Se você já conhece PHP e está aprendendo o nó, você provavelmente terá a tendência de programar as coisas “difíceis” em PHP, não aprendendo assim a maneira do nó de fazer isso.

Obviamente há provavelmente mais inconvenientes e benefícios, mas vamos ouvir sobre esses nos comentários 😉

Basicamente este artigo é um passo 1. Não é uma solução completa. É apenas para mostrar que pode ser feito e como.

Vamos começar

I’ll skip telling you how to install Node. Há muitos tutoriais sobre isso.

A primeira coisa que você precisa fazer é instalar o PHP (se você ainda não o fez).
Só siga as instruções padrão em http://php.net/manual/en/install.php e você deve ficar bem.

Também, neste exemplo eu uso o Express. Você não precisa usar o Express para rodar o PHP no Node.js, mas vamos com ele por enquanto.

npm install express – save

Agora vamos dar uma olhada no webserver.js que será o primeiro arquivo do nosso projeto.

Como você pode ver, nós fizemos um webserver bem simples. Se você já trabalhou com o Express antes, você já sabe o que a maioria do exemplo faz.

O material que você não viu antes é a exigência do “execphp.js” que é onde faremos a análise do PHP.

Também estamos definindo uma rota que recebe todos os *.php, e os executa através da classe execPHP.

Note: Change the variable execPHP.phpFolder to wherever you want to put your own php files.

Agora vamos dar uma olhada no “execphp.js” que será o segundo arquivo do nosso projeto.

Como você pode ver, este arquivo contém uma classe, ExecPHP, com um único método, parseFile. Este método basicamente pega um arquivo, executa a linha de comando PHP e chama o callback passado com o resultado.

Note: Change the variable this.phpPath to wherever you have PHP installed.

Agora vamos fazer um simples arquivo PHP. Eu chamei este “test.php” e coloquei-o na pasta “phpfiles” (aquele que você editou no webserver.js).

Como você pode ver este é um exemplo muito simples.

Agora vamos rodar o webserver.

node – use_strict webserver.js

E visite http://localhost:3000/test.php em nosso navegador.

Woohoo, esperemos que você obtenha o resultado do arquivo php.

Hello worldA simple counter:
0
1
2
3
4
5
6
7
8
9

Alguns outros problemas, vamos deixar como exercícios para o leitor.

Se você apenas usar este script sem editá-lo, você vai correr rapidamente para limitações. Por exemplo $_GET, $_REQUEST, etc. não está definido. Se você quisesse usar isto, você provavelmente teria o Node.js escrevendo algumas variáveis falsas de configuração PHP para o que você quiser que elas sejam, e processando isso antes do arquivo em si.

Bom ideias gerais para o desenvolvimento de furture:

  • Faça do execPHP um express-middleware em si.
  • Sanitize o nome do arquivo para ter certeza que as pessoas não estão escrevendo coisas como ../…/…/evilfile.php para acessar coisas que não deveriam.
  • Handle $_GET, $_SERVER, $_REQUEST, .etc. automaticamente na classe execPHP, assim esses estarão disponíveis nos scripts php.

Escrito por Martin Mouritzen.

Deixe uma resposta

O seu endereço de email não será publicado.