Ho visto molte richieste ultimamente, su come eseguire PHP in Node.js. Alcune richieste sono state fatte perché le persone non sanno come fare le stesse cose in Node.js come fanno facilmente in PHP, e altre richieste sono state fatte perché hanno bisogno di lavorare insieme ad altri team che programmano solo in PHP.
In ogni caso ho visto la risposta che non si può fare. Il che è di fatto inesatto. Dal momento che è possibile eseguire PHP sulla linea di comando, e Node.js può facilmente eseguire programmi attraverso la linea di comando, è assolutamente possibile.
Quali sono i vantaggi?
- Facile collaborazione tra team con conoscenze diverse
- PHP è davvero bravo a mettere insieme script veloci
- Non è necessario eseguire diversi server se sono necessari sia Node.js che PHP
Quali sono gli svantaggi?
- Più possibilità di violazioni della sicurezza
- Prestazioni non molto buone
- Facile darsi la zappa sui piedi
- Se conosci già PHP e stai imparando Node, probabilmente avrai la tendenza a programmare le cose “difficili” in PHP, non imparando così il modo di fare Node.
Ovviamente ci sono probabilmente altri svantaggi e benefici, ma sentiamoli nei commenti 😉
Fondamentalmente questo articolo è un passo 1. Non è una soluzione completa. È solo per mostrare che può essere fatto e come.
Iniziamo
Non vi dirò come installare Node. Ci sono molti tutorial su questo.
Prima cosa che devi fare è installare PHP (se non lo hai già fatto).
Basta seguire le istruzioni standard su http://php.net/manual/en/install.php e dovresti essere a posto.
Inoltre, in questo esempio uso Express. Non è necessario usare Express per eseguire PHP in Node.js, ma per ora facciamo così.
npm install express – save
Ora diamo un’occhiata a webserver.js che sarà il primo file del nostro progetto.
Come puoi vedere, abbiamo creato un webserver piuttosto semplice. Se hai già lavorato con Express, sai già cosa fa la maggior parte dell’esempio.
La roba che non hai visto prima è la richiesta di “execphp.js” che è dove faremo il parsing di PHP.
Stiamo anche definendo una rotta che riceve tutte le richieste *.php, e le esegue attraverso la classe execPHP.
Note: Change the variable execPHP.phpFolder to wherever you want to put your own php files.
Ora diamo un’occhiata a “execphp.js” che sarà il secondo file del nostro progetto.
Come potete vedere, questo file contiene una classe, ExecPHP, con un singolo metodo, parseFile. Questo metodo fondamentalmente prende un file, esegue la linea di comando PHP e chiama il callback passato con il risultato.
Note: Change the variable this.phpPath to wherever you have PHP installed.
Ora facciamo un semplice file PHP. L’ho chiamato “test.php” e l’ho messo nella cartella “phpfiles” (quella che hai modificato in webserver.js).
Come puoi vedere questo è un esempio molto semplice.
Ora eseguiamo il webserver.
node – use_strict webserver.js
E visitiamo http://localhost:3000/test.php nel nostro browser.
Woohoo, se tutto va bene, dovreste ottenere il risultato del file php.
Hello worldA simple counter:
0
1
2
3
4
5
6
7
8
9
Alcuni altri problemi, li lasceremo come esercizi per il lettore.
Se usate semplicemente questo script senza modificarlo, incontrerete rapidamente delle limitazioni. Per esempio $_GET, $_REQUEST, ecc. non è impostato. Se volessi usarlo, probabilmente dovresti far scrivere a Node.js delle false variabili PHP che impostano quello che vuoi che siano, ed elaborarle prima del file stesso.
Generalmente buone idee per lo sviluppo futuro:
- Rendere l’execPHP un express-middleware stesso.
- Sanitizzare il nome del file per assicurarsi che la gente non scriva cose come ../../../evilfile.php per accedere a cose che non dovrebbero.
- Gestire $_GET, $_SERVER, $_REQUEST, .etc. automaticamente nella classe execPHP, così questi saranno disponibili negli script php.
Scritto da Martin Mouritzen.