W ostatnim czasie widziałem wiele zapytań, jak uruchomić PHP w Node.js. Niektóre prośby były spowodowane tym, że ludzie nie wiedzą jak robić te same rzeczy w Node.js, które robią łatwo w PHP, a inne prośby były spowodowane tym, że muszą współpracować z innymi zespołami, które programują tylko w PHP.
W każdym przypadku widziałem odpowiedź, że nie da się tego zrobić. Co jest faktem nieścisłym. Ponieważ możesz uruchomić PHP w linii poleceń, a Node.js może łatwo wykonywać programy za pośrednictwem linii poleceń, jest to bardzo możliwe.
Jakie są korzyści?
- Łatwa współpraca między zespołami o różnej wiedzy
- PHP jest naprawdę dobry w rzucaniu szybkich skryptów razem
- Nie trzeba uruchamiać kilku serwerów, jeśli zarówno Node.js, jak i PHP są potrzebne
Jakie są wady?
- Więcej możliwości naruszenia bezpieczeństwa
- Niezbyt dobra wydajność
- Łatwe strzelanie sobie w stopę
- Jeśli znasz już PHP i uczysz się węzła, prawdopodobnie będziesz miał tendencję do programowania „trudnych” rzeczy w PHP, nie ucząc się w ten sposób węzłowego sposobu robienia tego.
Oczywiście jest pewnie więcej wad i zalet, ale o nich posłuchajmy w komentarzach 😉
Podstawowo ten artykuł to krok 1. Nie jest to kompletne rozwiązanie. Ma tylko pokazać, że można to zrobić i jak.
Zacznijmy
Opuszczam mówienie jak zainstalować Node. Jest wiele tutoriali na ten temat.
Pierwszą rzeczą jaką musisz zrobić to zainstalować PHP (jeśli jeszcze tego nie zrobiłeś).
Po prostu postępuj zgodnie ze standardowymi instrukcjami na stronie http://php.net/manual/en/install.php i powinno być dobrze.
Ponadto, w tym przykładzie używam Express. Nie musisz używać Expressu, aby uruchomić PHP w Node.js, ale na razie zróbmy tak.
npm install express – save
Teraz spójrzmy na webserver.js, który będzie pierwszym plikiem w naszym projekcie.
Jak widzisz, stworzyliśmy całkiem prosty webserver. Jeśli pracowałeś wcześniej z Expressem, wiesz już, co robi większość tego przykładu.
To, czego nie widziałeś wcześniej, to wymaganie „execphp.js”, gdzie będziemy wykonywać parsowanie PHP.
Zdefiniujemy również trasę, która odbiera wszystkie żądania *.php i przepuszcza je przez klasę execPHP.
Note: Change the variable execPHP.phpFolder to wherever you want to put your own php files.
Przyjrzyjrzyjmy się teraz „execphp.js”, który będzie drugim plikiem w naszym projekcie.
Jak widzisz, ten plik zawiera klasę, ExecPHP, z pojedynczą metodą, parseFile. Metoda ta w zasadzie pobiera plik, wykonuje PHP z linii poleceń i wywołuje przekazane wywołanie zwrotne z wynikiem.
Note: Change the variable this.phpPath to wherever you have PHP installed.
Następnie stwórzmy prosty plik PHP. Nazwałem go „test.php” i umieściłem w folderze „phpfiles” (tym, który edytowałeś w webserver.js).
Jak widzisz, jest to bardzo prosty przykład.
Teraz uruchommy webserver.
node – use_strict webserver.js
I odwiedź http://localhost:3000/test.php w naszej przeglądarce.
Woohoo, miejmy nadzieję, że powinieneś otrzymać wynik działania pliku php.
Hello worldA simple counter:
0
1
2
3
4
5
6
7
8
9
Kilka dalszych problemów, pozostawimy jako ćwiczenia dla czytelnika.
Jeśli po prostu użyjesz tego skryptu bez jego edycji, szybko natrafisz na ograniczenia. Na przykład $_GET, $_REQUEST, itd. nie są ustawione. Jeśli chciałbyś tego użyć, prawdopodobnie kazałbyś Node.js napisać jakiś fałszywy PHP ustawiający zmienne na takie, jakie chcesz, i przetwarzający to przed samym plikiem.
Ogólnie dobre pomysły na dalszy rozwój:
- Uczyń execPHP express-middleware samym w sobie.
- Oczyścić nazwę pliku, aby upewnić się, że ludzie nie piszą rzeczy takich jak ../../../evilfile.php, aby uzyskać dostęp do rzeczy, do których nie powinni.
- Obsługa $_GET, $_SERVER, $_REQUEST, .etc. automatycznie w klasie execPHP, więc będą one dostępne w skryptach php.
Pisane przez Martin Mouritzen.