Olen nähnyt viime aikoina paljon pyyntöjä siitä, miten PHP:tä voi käyttää Node.js:ssä. Jotkut pyynnöt ovat johtuneet siitä, että ihmiset eivät osaa tehdä samoja asioita Node.js:ssä kuin he tekevät helposti PHP:ssä, ja toiset pyynnöt ovat johtuneet siitä, että heidän on tehtävä yhteistyötä muiden tiimien kanssa, jotka ohjelmoivat vain PHP:llä.

Kaikkiin tapauksiin olen nähnyt vastauksen, että sitä ei voi tehdä. Mikä on asiallisesti epätarkkaa. Koska PHP:tä voi ajaa komentorivillä, ja Node.js:ssä voi helposti suorittaa ohjelmia komentorivin kautta, se on hyvin mahdollista.

Mitä hyötyä siitä on?

  • Helppoa yhteistyötä eri osaamista omaavien tiimien kesken
  • PHP on todella hyvä heittämään nopeita skriptejä yhteen
  • Ei tarvitse pyörittää useita palvelimia, jos tarvitaan sekä Node.js:ää että PHP:tä

Mitkä ovat haitat?

  • Enemmän mahdollisuuksia tietoturvaloukkauksiin
  • Ei kovin hyvä suorituskyky
  • Helppo ampua itseään jalkaan
  • Jos osaat jo PHP:tä ja opettelet nodea, sinulla on luultavasti taipumus ohjelmoida ”vaikeita” asioita PHP:llä, jolloin et opi noden tapaa tehdä asioita.

Tietysti haittoja ja hyötyjä on varmaan enemmänkin, mutta kuullaan niistä kommenteissa 😉

Periaatteessa tämä artikkeli on askel 1. Se ei ole täydellinen ratkaisu. Sen tarkoitus on vain näyttää, että se voidaan tehdä ja miten.

Aloitetaan

Kerron ohi, miten Node asennetaan. Siitä on paljon tutoriaaleja.

Ensiksi sinun täytyy asentaa PHP (jos et ole jo asentanut).
Seuraa vain http://php.net/manual/en/install.php:n vakio-ohjeita ja sinun pitäisi olla kunnossa.

Tässä esimerkissä käytän myös Expressiä. Sinun ei tarvitse käyttää Expressiä voidaksesi ajaa PHP:tä Node.js:ssä, mutta käytetään nyt sitä.

npm install express – save

Katsotaan nyt webserver.js:ää, joka on projektimme ensimmäinen tiedosto.

Kuten huomaat, teimme melko yksinkertaisen webserverin. Jos olet työskennellyt Expressin kanssa aiemmin, tiedät jo, mitä suurin osa esimerkistä tekee.

Juttu, jota et ole nähnyt aiemmin, on vaatimus ”execphp.js”, jossa teemme PHP:n jäsennyksen.

Määrittelemme myös reitin, joka vastaanottaa kaikki *.php-pyynnöt ja ajaa ne execPHP-luokan läpi.

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

Katsotaan nyt ”execphp.js”, joka on projektimme toinen tiedosto.

Kuten näet, tämä tiedosto sisältää luokan, ExecPHP, jolla on yksi metodi, parseFile. Tämä metodi periaatteessa ottaa tiedoston, suorittaa komentorivin PHP:n ja kutsuu välitettyä callbackia tuloksen kanssa.

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

Tehdään nyt yksinkertainen PHP-tiedosto. Olen kutsunut tätä nimellä ”test.php” ja laittanut sen kansioon ”phpfiles” (se, jota muokkasit webserver.js:ssä).

Kuten huomaat, tämä on hyvin yksinkertainen esimerkki.

Jatketaan nyt webserverin suorittamista.

node – use_strict webserver.js

Ja vierailemme http://localhost:3000/test.php selaimessamme.

Woohoo, toivottavasti saisit php-tiedoston tuloksen.

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

Joitakin lisäongelmia jätämme harjoituksiksi lukijalle.

Jos vain käytät tätä skriptiä muokkaamatta sitä, törmäät nopeasti rajoituksiin. Esimerkiksi $_GET, $_REQUEST jne. ei ole asetettu. Jos haluaisit käyttää tätä, laittaisit luultavasti Node.js:n kirjoittamaan väärennetyn PHP:n, joka asettaa muuttujat siihen, mitä haluat niiden olevan, ja käsittelisi sen ennen itse tiedostoa.

Yleisesti hyviä ideoita jatkokehitystä varten:

  • Tehdä execPHP:stä itsestään express-middleware.
  • Sanitoi tiedostonimi varmistaaksesi, että ihmiset eivät kirjoita juttuja kuten ../../../../evilfile.php päästäkseen käsiksi asioihin, joihin heidän ei pitäisi.
  • Käsittele $_GET, $_SERVER, $_REQUEST, .jne. automaattisesti execPHP-luokassa, jotta ne ovat käytettävissä php-skripteissä.

Kirjoittanut: Martin Mouritzen.

Vastaa

Sähköpostiosoitettasi ei julkaista.