Von dieser Antwort auf ServerFault:
Verwenden Sie den php-cgi
binär statt nur php
, und übergeben Sie die Argumente wie folgt auf der Befehlszeile:
php-cgi -f index.php left=1058 right=1067 class=A language=English
Was dies in $_GET
bringt :
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
Sie können auch Umgebungsvariablen setzen, die vom Webserver gesetzt würden, wie folgt:
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
Normalerweise verwenden Sie zum Übergeben von Argumenten an ein Befehlszeilenskript entweder argv
globale Variable oder getopt:
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$_GET bezieht sich auf die HTTP-GET-Methodenparameter, die in der Befehlszeile nicht verfügbar sind, da sie einen Webserver zum Auffüllen erfordern.
Wenn Sie $_GET trotzdem wirklich füllen möchten, können Sie Folgendes tun:
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
Sie können auch ein bestimmtes Skript ausführen, geben Sie $_GET
ein von der Befehlszeile, ohne das Skript ändern zu müssen:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Beachten Sie, dass Sie dasselbe mit $_POST
tun können und $_COOKIE
auch.
Ich habe keine php-cgi-Binärdatei auf Ubuntu, also habe ich Folgendes getan:
% alias php-cgi="php -r '"'parse_str(implode("&", array_slice($argv, 2)), $_GET); include($argv[1]);'"' --" % php-cgi test1.php foo=123 <html> You set foo to 123. </html> %cat test1.php <html>You set foo to <?php print $_GET['foo']?>.</html>