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?
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);
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
Ü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.