Az utóbbi időben sok kérést láttam, hogy hogyan futtassuk a PHP-t Node.js-ben. Néhány kérés azért volt, mert az emberek nem tudják, hogyan kell ugyanazokat a dolgokat Node.js-ben csinálni, mint amit PHP-ben egyszerűen csinálnak, más kérések pedig azért voltak, mert együtt kell dolgozniuk más csapatokkal, akik csak PHP-ben programoznak.

Minden esetben azt a választ láttam, hogy nem lehet megcsinálni. Ami tényszerűen pontatlan. Mivel a PHP-t futtathatod a parancssoron, és a Node.js is könnyen tud programokat futtatni a parancssoron keresztül, nagyon is lehetséges.

Mi az előnye?

  • Egyszerű együttműködés különböző tudású csapatok között
  • A PHP nagyon jó abban, hogy gyors szkripteket dobjon össze
  • Nem kell több szervert futtatni, ha a Node.js-re és a PHP-ra is szükség van

Mi a hátránya?

  • Több lehetőség a biztonsági résekre
  • Nem túl jó a teljesítmény
  • Egyszerűen lábon lövöd magad
  • Ha már ismered a PHP-t és tanulod a node-ot, akkor valószínűleg hajlamos leszel a “nehéz” dolgokat PHP-ben programozni, így nem tanulod meg a node módját.

Naná, hogy valószínűleg több hátránya és előnye is van, de ezekről halljuk a hozzászólásokban 😉

Lényegében ez a cikk egy 1. lépés. Nem egy teljes megoldás. Csak megmutatja, hogy meg lehet csinálni és hogyan.

Lássunk hozzá

Kihagyom, hogy elmondjam, hogyan kell telepíteni a Node-ot. Erről rengeteg tutorial van.

Az első dolog, amit tenned kell, az a PHP telepítése (ha még nem tetted meg).
Egyszerűen csak kövesd a http://php.net/manual/en/install.php oldalon található szabványos utasításokat, és minden rendben lesz.

Ebben a példában az Express-t használom. Nem muszáj Express-t használnod ahhoz, hogy PHP-t futtass a Node.js-ben, de egyelőre maradjunk ennél.

npm install express – save

Most nézzük meg a webserver.js-t, ami az első fájl lesz a projektünkben.

Mint láthatod, egy elég egyszerű webszervert készítettünk. Ha már dolgoztál korábban Express-szel, akkor már tudod, hogy a példa nagy része mit csinál.

Az, amit még nem láttál, az az “execphp.js” megkövetelése, ahol a PHP elemzést fogjuk elvégezni.

Meghatározunk egy útvonalat is, amely az összes *.php kéréseket, és lefuttatja azokat az execPHP osztályon keresztül.

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

Most vessünk egy pillantást az “execphp.js”-re, amely a második fájl lesz a projektünkben.

Mint láthatjuk, ez a fájl tartalmaz egy osztályt, az ExecPHP-t, egyetlen metódussal, a parseFile-val. Ez a metódus alapvetően fogadja a fájlt, végrehajtja a parancssori PHP-t, és az eredménnyel meghívja az átadott callback-et.

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

Most készítsünk egy egyszerű PHP fájlt. Ezt “test.php”-nak neveztem el, és a “phpfiles” mappába tettem (abba, amit a webserver.js-ben szerkesztettünk).

Mint láthatod, ez egy nagyon egyszerű példa.

Most futtassuk a webszervert.

node – use_strict webserver.js

És látogassunk el a http://localhost:3000/test.php-ra a böngészőnkben.

Húúúúú, remélhetőleg meg kell kapnunk a php fájl eredményét.

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

Még néhány további problémát meghagyunk gyakorlatként az olvasónak.

Ha csak úgy, szerkesztés nélkül használjuk ezt a szkriptet, hamar korlátokba ütközünk. Például a $_GET, $_REQUEST stb. nincs beállítva. Ha ezt akarod használni, akkor valószínűleg a Node.js-szel írnod kellene néhány hamis PHP-t, ami beállítja a változókat arra, amire szeretnéd, és ezt feldolgoznád maga a fájl előtt.

Általában jó ötletek a jövőbeli fejlesztéshez:

  • Maga az execPHP egy express-middleware legyen.
  • Szanitizálja a fájlnevet, hogy az emberek ne írjanak olyan dolgokat, mint ../../../../evilfile.php, hogy hozzáférjenek olyan dolgokhoz, amikhez nem kellene.
  • Az execPHP osztályban automatikusan kezelje a $_GET, $_SERVER, $_REQUEST, .stb. értékeket, így azok elérhetőek lesznek a php szkriptekben.

Az író: Martin Mouritzen.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.