web-dev-qa-db-fra.com

Exécuter la commande Bash à partir de PHP

J'ai un script bash que je lance comme ceci via la ligne de commande:

./script.sh var1 var2

J'essaie d'exécuter la commande ci-dessus après avoir appelé un certain fichier php.

Ce que j'ai maintenant c'est:

$output = Shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";

Mais ça ne marche pas. Je l'ai essayé aussi avec exec et system, mais le script n'a jamais été exécuté.

Cependant, lorsque j'essaie d'exécuter Shell_exec("ls");, cela fonctionne et $output contient la liste de tous les fichiers.

Je ne sais pas si cela est dû à une limitation du VPS que j'utilise ou si le problème se situe ailleurs?

45
Oskar

Vous aurez probablement besoin de chdir dans le bon répertoire avant d'appeler le script. De cette façon, vous pouvez vérifier dans quel répertoire votre script est "in" avant d'appeler la commande Shell.

$old_path = getcwd();
chdir('/my/path/');
$output = Shell_exec('./script.sh var1 var2');
chdir($old_path);
67
Robert K

Votre Shell_exec est exécuté par l'utilisateur www-data, à partir de son répertoire . Vous pouvez essayer

putenv("PATH=/home/user/bin/:" .$_ENV["PATH"]."");

Où se trouve votre script dans/home/user/bin Plus tard, vous pourrez

$output = "<pre>".Shell_exec("scriptname v1 v2")."</pre>";
echo $output;

Pour afficher le résultat de la commande. (Alternativement, sans exporter le chemin, essayez de donner le chemin complet de votre script au lieu de ./script.sh

5
Hrishikesh

Vérifiez si vous n'avez pas défini open_basedir dans le fichier php.ini ou .htaccess du domaine que vous utilisez. Cela vous jettera dans le répertoire de votre domaine et php n'aura qu'un accès à exécuter à l'intérieur de ce répertoire. 

0
CommanderSpock