Comment passer les paramètres de la ligne de commande à $ POST dans php-script?

Je sais que cela peut sembler un peu bizarre mais j'ai besoin de passer quelques paramètres à un tableau $_POST. Similaire à la façon dont apache le fait, ou tout autre serveur web.

Malheureusement, je ne pouvais pas trouver {[0] } n'importe où pour mon Ubuntu.

29
demandé sur Chris 2011-04-14 00:34:52

3 réponses

Ce n'est pas facile à faire. Vous pouvez appeler le binaire php-cgi et envoyer une fausse requête POST. Mais vous devrez configurer beaucoup 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 

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


C'est certainement plus facile si vous venez de patcher le script et de le laisser 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 plus de simplicité.

17
répondu mario 2011-04-13 20:46:45

Je cherchais une solution pour cela et je suis passé, parce que c'était le premier succès chez Google. le second était en quelque sorte plus utile pour moi, 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 voulez 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'

Amusez-vous!

42
répondu Schlangi 2013-07-18 13:12:55

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

3
répondu user926400 2013-06-27 12:57:04