J'ai besoin d'exécuter un fichier php avec des paramètres via Shell.
voici comment j'exécuterais le fichier php:
php -q htdocs/file.php
Je dois faire passer le paramètre "show" et
php -q htdocs/file.php? show = nom_montre
ne fonctionne pas
Si quelqu'un pouvait m'expliquer quelle commande exécuter pour que le fichier php s'exécute avec des paramètres définis, ce serait très apprécié. Sinon, essayez de me conduire dans la bonne direction.
test.php:
<?php
print_r($argv);
?>
Coquille:
$ php -q test.php foo bar
Array
(
[0] => test.php
[1] => foo
[2] => bar
)
Si vous avez un serveur web (pas seulement un interpréteur php installé, mais LAMP/LNMP/etc) - essayez simplement ceci
wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1
où:
Dans "exec" de PHP, ce sera comme ceci:
function exec_local_url($url) {
exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_Host'] .'/'
. addslashes($url) . '" >/dev/null 2>&1'
);
}
// ...
exec_local_url("file.php?show=show_name");
exec_local_url("myframework/seo-readable/show/show_name");
Ainsi, vous n'avez pas besoin de modifier vos scripts pour gérer argc/argv, et pouvez utiliser $ _GET comme d'habitude.
Si vous voulez que les travaux soient exécutés en arrière-plan - voir par ex. --- (Unix/Windows, processus d'installation en arrière-plan? À partir du code php
J'utilise l'approche avec wget dans mes tâches cron; J'espère que ça aide.
Vous devez lire les paramètres de ligne de commande à partir de $ argc et $ argv .
L'utilisation d'un point d'interrogation est quelque chose que vous faites dans une URL et n'a rien à voir avec l'exécution de PHP à partir d'une ligne de commande.
Voir aussi: http://www.sitepoint.com/php-command-line-1/
En plus des autres réponses (qui sont tout à fait correctes), vous pouvez également passer des arguments en tant que paramètres d'environnement, comme ceci:
FOO=42 BAR=quux php test.php
Ils seront ensuite disponibles dans le superglobal $_ENV
.
Si vous l'utilisez à partir d'un fichier PHP, alors vous pouvez utiliser popen () et faire quelque chose comme ceci:
$part = $show_name; //or whatever you want with spaces
$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");
Ceci utilise la fonction escapeshellarg () afin d'envelopper le $part
variable entre guillemets (et échappe tous les guillemets à l'intérieur), afin qu'elle puisse être utilisée comme argument Shell en toute sécurité.