Próbuję utworzyć serwer WWW, który obsługuje skrypty PHP. Obecnie działa w następujący sposób:
- Klient żąda /index.php?test=value
- Serwer się wywołuje
php index.php
- Serwer podaje nagłówki żądań HTTP jako STDIN do procesu PHP
- Serwer odczytuje dane wyjściowe
php
z STDOUT i zwraca je klientowi
Wszystko to działa, z wyjątkiem tego, że parametry nie są przekazywane do skryptu PHP, ponieważ:
var_dump($_GET);
zwroty:
tablica (0) {}
W jaki sposób $_GET
parametry są przekazywane do pliku binarnego PHP po jego wywołaniu?
Odpowiedzi:
Z którego pliku binarnego PHP korzystasz? CLI czy CGI? Podejrzewam, że potrzebujesz wersji binarnej CGI dla PHP, aby poprawnie obsłużyć akceptuj zmienne środowiskowe i dane POST, jeśli je przekażesz.
Plik
php-cgi
binarny implementuje interfejs CGI, który umożliwia przekazywanie parametrów w wierszu poleceń:Które kończą się w
$_GET
:Możesz przeczytać o tym, jak działa CGI, aby zaimplementować to na serwerze WWW.
Ref: RFC3875
źródło
Według Wikipedii odpowiedzią jest ustawienie
QUERY_STRING
zmiennej środowiskowej:lub w osobnych krokach:
Działa to, jeśli użyjesz
php-cgi
polecenia, ponieważ jest to część specyfikacji CGI. Zwykłephp
polecenie ignoruje tę zmienną, ale skrypt może jej użyć.źródło
Jeśli zdasz test php script.php = asdf
Jeśli przekazujesz go do STDIN, musisz przeczytać STDIN i sam parsować nagłówki. REQUEST_URI będzie zawierać potrzebne dane, które możesz przekazać.
źródło
$_GET
tak jak są, gdy PHP jest używane pod Apache./index.php?test=asdf;rm%20-rf%20/