Am văzut o mulțime de cereri în ultima vreme, despre cum să rulezi PHP în Node.js. Unele cereri au fost pentru că oamenii nu știu cum să facă aceleași lucruri în Node.js pe care le fac ușor în PHP, iar alte cereri au fost pentru că trebuie să lucreze împreună cu alte echipe care programează doar în PHP.

În fiecare caz am văzut răspunsul, că nu se poate face. Ceea ce este inexact din punct de vedere faptic. Din moment ce poți rula PHP în linia de comandă, iar Node.js poate executa cu ușurință programe prin linia de comandă, este foarte posibil.

Care sunt beneficiile?

  • Colaborare ușoară între echipe cu cunoștințe diferite
  • PHP este foarte bun pentru a pune laolaltă scripturi rapide
  • Nu este nevoie de a rula mai multe servere dacă sunt necesare atât Node.js cât și PHP

Care sunt dezavantajele?

  • Mai multe posibilități de breșe de securitate
  • Nu foarte bune performanțe
  • Facil de a te împușca în picior
  • Dacă știi deja PHP și înveți node, probabil că vei avea tendința de a programa lucrurile „grele” în PHP, astfel încât să nu înveți modul de a face node.

Desigur există probabil mai multe dezavantaje și beneficii, dar să le auzim în comentarii 😉

În principiu, acest articol este un pas 1. Nu este o soluție completă. Este doar pentru a arăta că se poate face și cum se poate face.

Să începem

Voi sări peste a vă spune cum să instalați Node. Există o mulțime de tutoriale despre asta.

Primul lucru pe care trebuie să-l faceți este să instalați PHP (dacă nu l-ați instalat deja).
Să urmați instrucțiunile standard de pe http://php.net/manual/en/install.php și ar trebui să fiți în regulă.

De asemenea, în acest exemplu folosesc Express. Nu trebuie să folosiți Express pentru a rula PHP în Node.js, dar să mergem cu el deocamdată.

npm install express – save

Acum să aruncăm o privire la webserver.js, care va fi primul fișier din proiectul nostru.

După cum puteți vedea, am făcut un server web destul de simplu. Dacă ați mai lucrat cu Express înainte, știți deja ce face cea mai mare parte a exemplului.

Cele pe care nu le-ați mai văzut până acum este solicitarea fișierului „execphp.js” care este locul unde vom face parsarea PHP.

De asemenea, definim o rută care primește toate *.php și le rulează prin clasa execPHP.

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

Acum să ne uităm la „execphp.js”, care va fi al doilea fișier din proiectul nostru.

După cum puteți vedea, acest fișier conține o clasă, ExecPHP, cu o singură metodă, parseFile. Practic, această metodă ia un fișier, execută linia de comandă PHP și apelează callback-ul trecut cu rezultatul.

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

Acum să facem un fișier PHP simplu. L-am numit „test.php” și l-am pus în folderul „phpfiles” (cel pe care l-ați editat în webserver.js).

După cum puteți vedea, acesta este un exemplu foarte simplu.

Acum să rulăm serverul web.

node – use_strict webserver.js

Și vizitați http://localhost:3000/test.php în browserul nostru.

Woohoohoo, să sperăm că ar trebui să obțineți rezultatul din fișierul php.

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

Câteva probleme suplimentare, le vom lăsa ca exerciții pentru cititor.

Dacă folosiți pur și simplu acest script fără să-l editați, veți da rapid peste limitări. De exemplu, $_GET, $_REQUEST, etc. nu este setat. Dacă ați dori să folosiți acest lucru, probabil că ați pune Node.js să scrie un PHP fals care să seteze variabilele la ceea ce doriți să fie, și să proceseze asta înainte de fișierul propriu-zis.

Idei bune în general pentru dezvoltarea viitoare:

  • Faceți din execPHP un express-middleware în sine.
  • Sanitizați numele de fișier pentru a vă asigura că oamenii nu scriu chestii precum ../../../../evilfile.php pentru a accesa lucruri pe care nu ar trebui să le acceseze.
  • Gestionați $_GET, $_SERVER, $_REQUEST, .etc. automat în clasa execPHP, astfel încât acestea să fie disponibile în scripturile php.

Scris de Martin Mouritzen.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.