Question Shell exécute / exécute un script php avec des paramètres


Je dois 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 = show_name

ne fonctionne pas

Si quelqu'un pouvait m'expliquer quelle commande exécuter pour que le fichier php s'exécute avec les paramètres définis, ce serait très apprécié. Sinon, essayez de me guider dans la bonne direction.


32
2017-07-20 15:01


origine


Réponses:


test.php:

<?php
print_r($argv);
?>

Coquille:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)

38
2017-07-20 15:07



Si vous avez un serveur Web (non seulement un interpréteur php installé, mais aussi LAMP / LNMP / etc), essayez ceci:

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1

où:

  • «-O -» - (Lettre "O", pas zéro!) Rediriger "HTML téléchargé" vers stdout
  • «> / Dev / null 2> & 1» - redirige les sorties stdout & stderr vers nulle part
  • «-Q» - calme wget courir
  • «-T 1» - juste 1 essayez de vous connecter (pas comme 20 par défaut)

Dans PHP, "exec" ça va être comme ça:

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");

Vous n'avez donc pas besoin de modifier vos scripts pour gérer argc / argv, et vous 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'arrière-plan de configuration? du code php

J'utilise l'approche avec wget dans mes tâches cron; J'espère que cela aide.


4
2018-04-18 09:47



Vous devez lire les paramètres de la ligne de commande depuis $ argc et $ argv.

Utiliser un point d'interrogation est quelque chose que vous faites dans une URL et qui n'a rien à voir avec l'exécution de PHP à partir d'une ligne de commande.

Voir également: http://www.sitepoint.com/php-command-line-1/


3
2017-07-20 15:04



En plus des autres réponses (qui sont assez 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 alors disponibles dans le superglobal $_ENV.


2
2017-07-20 15:15



Si vous l'utilisez depuis un fichier PHP, 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");

Cela utilise la fonction escapeshellarg () pour envelopper le $part variable entre guillemets (et échappe aux guillemets qu'elle contient), de sorte qu'elle puisse être utilisée comme argument de shell en toute sécurité.


0
2017-07-20 15:30