À partir de cette réponse sur ServerFault :
Utilisez le php-cgi
binaire au lieu de simplement php
, et transmettez les arguments sur la ligne de commande, comme ceci :
php-cgi -f index.php left=1058 right=1067 class=A language=English
Ce qui met cela dans $_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
Vous pouvez également définir des variables d'environnement qui seraient définies par le serveur Web, comme ceci :
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
Généralement, pour passer des arguments à un script de ligne de commande, vous utiliserez soit argv
variable globale ou 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 fait référence aux paramètres de la méthode HTTP GET, qui ne sont pas disponibles en ligne de commande, car ils nécessitent un serveur Web pour être remplis.
Si vous voulez vraiment remplir $_GET de toute façon, vous pouvez le faire :
// 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
)
*/
Vous pouvez également exécuter un script donné, remplir $_GET
depuis la ligne de commande, sans avoir à modifier ledit script :
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Notez que vous pouvez faire la même chose avec $_POST
et $_COOKIE
aussi.
Je n'ai pas de binaire php-cgi sur Ubuntu, j'ai donc fait ceci :
% 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>