web-dev-qa-db-fra.com

Comment passer des paramètres de la ligne de commande à $ _POST en php-script?

Je sais que cela peut sembler un peu bizarre, mais je dois passer certains paramètres à un tableau $ _POST. Semblable à la façon dont Apache le fait, ou à tout autre serveur Web.

Malheureusement, je n'ai pas pu trouver libapache2-mod-php5 n'importe où pour mon Ubuntu.

30
hades

Ce n'est pas facile à faire. Vous pouvez invoquer le php-cgi binaire et pipe une fausse POST dedans. Mais vous devrez configurer un grand nombre de variables d'environnement CGI:

echo 'var1=123&var2=abc' | REQUEST_METHOD=POST  SCRIPT_FILENAME=script.php REDIRECT_STATUS=CGI CONTENT_TYPE=application/www-form-urlencoded php-cgi 

Remarque: Insuffisant, ne fonctionne pas comme ça. Mais quelque chose comme ça ...


C'est certainement plus facile si vous corrigez simplement le script et laissez-le charger le tableau $ _POST à ​​partir d'une variable d'environnement prédéfinie.

$_POST = parse_url($_SERVER["_POST"]);

Ensuite, vous pouvez l'invoquer comme _POST=var=123 php script.php pour la simplicité.

18
mario

Je cherchais une solution pour cela et je suis passé, car c'était le premier succès chez Google. Le second m'a été en quelque sorte plus utile, car il a une solution vraiment facile, si vous avez accès au script PHP et pouvez le changer).

Insérez simplement les lignes suivantes au début de votre script:

/* if started from commandline, wrap parameters to $_POST and $_GET */
if (!isset($_SERVER["HTTP_Host"])) {
  parse_str($argv[1], $_GET);
  parse_str($argv[1], $_POST);
}

Ce petit morceau de code fait l'affaire (vous pouvez décider si vous souhaitez utiliser $ _GET ou $ _POST ou, comme j'en avais besoin, les deux).
Après avoir changé votre script, vous pouvez l'appeler à partir de la ligne de commande en passant vos arguments:

php yourscript.php 'arg1=x&arg2=y'

S'amuser!

45
Schlangi

utiliser curl pour publier des données
curl --data "name = ii" "param1 = value1 & param2 = value2" http://test.com/sample.php

2
user926400