2013-01-24 17 views
5

Czy jest możliwe wykonanie kodu PHP z programu, który nie łączy się ze skryptem za pośrednictwem serwera WWW? Początkowo myślałem o interpreteru języka CLI PHP, ale nie zawiera on żadnej z zmiennych $ _SERVER lub $ _REQUEST wspólnych dla żądań witryny.Wykonywanie PHP w "środowisku" serwera WWW bez Apache (lub innego serwera WWW)

A więc, jeśli można naśladować, jak można go przypisać? Nie myślę o żadnym konkretnym języku programowania, ponieważ jestem pewien, że istnieje pewien wspólny interfejs pomiędzy serwerami internetowymi i php, który byłby niezależny od platformy.

Celem tego pytania jest zbudowanie aplikacji Node.JS, która może działać jako serwer WWW, a następnie (w razie potrzeby) może wykonywać skrypty PHP (z określonymi danymi wejściowymi), pobrać odpowiedź, a następnie, w razie potrzeby, wykonać dodatkowe przetwarzanie wyjście, a następnie zapisz je klientowi.

Odpowiedz

3

Chyba że chcesz zbudować modułu PHP dla node.js, myślę CLI jest jedynym wyborem - można przejść wymaganych zmiennych poprzez linię poleceń, a myślę, że nic nie przemawia przeciwko przebudowie je wewnątrz skryptu:

php -f myscript.php /websites/myscript domain.com 1.2.3.4.5 

Jednym ze sposobów, aby idealny, aby te argumenty i zapisać je w zmiennych, które następnie użyć w skrypcie.

Jeśli masz istniejący skrypt, który używa $_SERVER i nie chcesz go przepisywać, byłoby to działające, ale nieeleganckie obejście tego problemu. (Nieeleganckie, bo jesteś normalnie nie powinien napisać do $_SERVER, $_GET itp.)

$_SERVER["REQUEST_URI"] = $argv[1]; 
$_SERVER["SERVER_NAME"] = $argv[2]; 
$_SERVER["REMOTE_ADDR"] = $argv[3]; 

CLI: Command line usage

(nie jestem dość pewien czy nadpisywania zmiennych serwera jak to jest koszerne, czuje się trochę źle, ale na pewno działa w standardowym setupie.) Poproszę facetów na czacie PHP o tym, co myślą ... edytuj: nikt tak naprawdę lubi, ale nie wydaje się, żeby były jakieś poważne wady)

+0

Myślałem, czy użyłem metodą CLI, musiałbym serializować dane i parsować je za pomocą argumentów, lub użyć czegoś takiego jak memcache. Ale pomyślałem, że będę musiał zbudować moduł, ale jeśli jest dostępny dobry moduł węzła CGI, użyłbym tego (lub kodu własnego, gdyby wydawało się łatwiejsze). – topherg

+0

@ cgoddard tak. Może ktoś wymyśli rozwiązanie modułowe, które * byłoby * najmilszym sposobem ... chociaż domyślam się, że nic nie przemawia przeciwko memcache tutaj –

+0

Cóż, nie potrzebujesz całej listy danych, tylko tego, czego chcesz. Czy CGI jest interfejsem serwera WWW (takiego jak Apache) z PHP? – topherg

Powiązane problemy