129 votes

PHP en passant de $_GET dans l'invite de commande linux

Dire que nous avons l'habitude de l'accès via

http://localhost/index.php?a=1&b=2&c=3

Comment exécuter la même dans l'invite de commande linux?

php -e index.php

Mais qu'en passant le $_GET variables? Peut-être quelque chose comme php-e index.php --1 --2 --c 3? Doute que ça va marcher.

Merci!!!!

251voto

qris Points 1649

À partir de cette réponse sur ServerFault:

Utiliser l' php-cgi binaire au lieu de simplement en php, et de passer les arguments sur la ligne de commande, comme ceci:

php-cgi -f index.php left=1058 right=1067 class=A language=English

Ce qui place cette en $_GET:

Array
(
    [left] => 1058
    [right] => 1067
    [class] => A
    [language] => English
)

Vous pouvez également définir des variables d'environnement qui seraient fixées 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

129voto

netcoder Points 31874

En règle générale, pour les arguments passés à un script de ligne de commande, vous utiliserez 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 se réfère à la méthode HTTP GET paramètres, qui ne sont pas disponibles en ligne de commande, car ils ont besoin d'un serveur web à remplir.

Si vous voulez vraiment vous renseigner $_GET de toute façon, vous pouvez faire ceci:

// 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, remplir $_GET à partir de 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 de même avec $_POST et $_COOKIE .

17voto

Tim Booth Points 71

Je n'ai pas de php-cgi binaire 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>
Vous définissez foo à 123.
</html>

%chat test1.php
<html>Vous définissez foo <?php print $_GET['foo']?>.</html>

13voto

T. Brian Jones Points 2144
php file_name.php var1 var2 varN

...Puis réglez votre $_GET variables sur votre première ligne en PHP, mais ce n'est pas de la manière souhaitée du paramètre $_GET variable et vous pouvez rencontrer des problèmes en fonction de ce que vous faites, plus tard, avec cette variable.

if(isset($argv[1]) {
   $_GET['variable_name'] = $argv[1];

les variables que vous lancez le script avec la commande sera accessible à partir du tableau $argv dans votre php app. la première entrée le nom du script qui est ils venaient, de sorte que vous voudrez peut-être faire un array_shift($argv) pour y déposer que la première entrée si vous voulez traiter un tas de variables.

9voto

Giu Points 2070

Essayez d'utiliser WGET:

WGET 'http://localhost/index.php?a=1&b=2&c=3'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X