Z této odpovědi na ServerFault:
Použijte php-cgi
binární místo pouze php
a předejte argumenty na příkazovém řádku takto:
php-cgi -f index.php left=1058 right=1067 class=A language=English
Což dává toto do $_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
Můžete také nastavit proměnné prostředí, které by nastavil webový server, takto:
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
Pro předávání argumentů skriptu příkazového řádku obvykle použijete buď argv
globální proměnná nebo 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 odkazuje na parametry metody HTTP GET, které nejsou dostupné v příkazovém řádku, protože vyžadují k naplnění webový server.
Pokud opravdu chcete naplnit $_GET, můžete to udělat takto:
// 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
)
*/
Můžete také spustit daný skript, naplnit $_GET
z příkazového řádku, aniž byste museli upravovat uvedený skript:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Všimněte si, že totéž můžete udělat s $_POST
a $_COOKIE
také.
Na Ubuntu nemám binární soubor php-cgi, takže jsem udělal toto:
% 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>