Ich versuche, einen Webserver zu erstellen, der PHP-Skripte bereitstellt. Derzeit funktioniert es wie folgt:
- Der Client fordert /index.php?test=value an
- Der Server ruft auf
php index.php
- Der Server leitet die HTTP-Anforderungsheader als STDIN an den PHP-Prozess weiter
- Der Server liest die Ausgabe
php
von STDOUT und gibt sie an den Client zurück
All dies funktioniert, außer dass die Parameter nicht an das PHP-Skript übergeben werden, weil:
var_dump($_GET);
kehrt zurück:
Array (0) {}
Wie werden $_GET
Parameter beim Aufruf an die PHP-Binärdatei übergeben?
Antworten:
Welche PHP-Binärdatei verwenden Sie? Die CLI oder CGI? Ich vermute, Sie benötigen eine CGI-Version der Binärdatei für PHP, um die Umgebungsvariablen und POST-Daten ordnungsgemäß zu akzeptieren, wenn Sie dies bestehen.
Die
php-cgi
Binärdatei implementiert die CGI-Schnittstelle, mit der Sie Parameter in der Befehlszeile übergeben können:Welche landen in
$_GET
:Sie können sich über die Funktionsweise von CGI informieren, um dies auf Ihrem Webserver zu implementieren.
Ref: RFC3875
quelle
Laut Wikipedia lautet die Antwort, die
QUERY_STRING
Umgebungsvariable zu setzen :oder in separaten Schritten:
Dies funktioniert, wenn Sie den
php-cgi
Befehl verwenden, da dies Teil der CGI-Spezifikation ist. Der normalephp
Befehl ignoriert diese Variable, aber Ihr Skript verwendet sie möglicherweise.quelle
Wenn Sie PHP script.php Test übergeben = asdf
Wenn Sie es an STDIN übergeben, müssen Sie STDIN lesen und die Header selbst analysieren. REQUEST_URI würde die Daten enthalten, die Sie benötigen, und Sie könnten das übergeben.
quelle
$_GET
wie sie sind, wenn PHP unter Apache verwendet wird./index.php?test=asdf;rm%20-rf%20/