it-swarm.com.de

Führen Sie den Bash-Befehl aus PHP

Ich habe ein Bash-Skript, das ich über die Kommandozeile so ausführen kann:

./script.sh var1 var2

Ich versuche, den obigen Befehl auszuführen, nachdem ich eine bestimmte PHP-Datei aufgerufen habe.

Was ich jetzt habe, ist:

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

Aber es geht nicht. Ich habe es auch mit exec und system versucht, aber das Skript wurde nie ausgeführt.

Wenn ich jedoch versuche, Shell_exec("ls"); auszuführen, funktioniert es und $output ist eine Liste aller Dateien.

Ich bin nicht sicher, ob dies auf eine Einschränkung der verwendeten VPS zurückzuführen ist oder ob das Problem woanders liegt?

45
Oskar

Möglicherweise müssen Sie chdir in das richtige Verzeichnis eingeben, bevor Sie das Skript aufrufen. Auf diese Weise können Sie sicherstellen, in welchem ​​Verzeichnis sich Ihr Skript befindet, bevor Sie den Shell-Befehl aufrufen.

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

Ihre Shell_exec wird vom Benutzer www-data in ihrem Verzeichnis ..__ ausgeführt. Sie können es versuchen

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

Wo sich Ihr Skript in/home/user/bin .__ befindet. Später können Sie

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

Um die Ausgabe des Befehls anzuzeigen. (Alternativ können Sie, ohne den Pfad zu exportieren, den gesamten Pfad Ihres Skripts anstelle von ./script.sh angeben

5
Hrishikesh

Überprüfen Sie, ob in der Datei php.ini oder .htaccess der Domäne kein open_basedir festgelegt wurde. Das sperrt Sie in das Verzeichnis Ihrer Domain und php erhält nur Zugriff, um innerhalb dieses Verzeichnisses ausgeführt zu werden. 

0
CommanderSpock