Ich habe ein Bash-Skript, das ich über die Kommandozeile wie folgt ausführe:
./script.sh var1 var2
Ich versuche, den obigen Befehl auszuführen, nachdem ich eine bestimmte php-Datei aufgerufen habe.
Was ich im Moment habe ist:
$output = shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";
Aber es funktioniert´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 mir nicht sicher, ob dies an einer Einschränkung des VPS liegt, den ich verwende, oder ob das Problem woanders liegt?
Wahrscheinlich müssen Sie vor dem Aufruf des Skripts mit chdir in das richtige Verzeichnis wechseln. 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 dessen Verzeichnis ausgeführt. Sie können 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, ohne den Pfad zu exportieren, versuchen Sie, den gesamten Pfad Ihres Skripts anzugeben, anstatt nur ./script.sh
Prüfen Sie, ob Sie in der php.ini oder .htaccess der von Ihnen verwendeten Domain nicht ein open_basedir gesetzt haben. Dadurch werden Sie im Verzeichnis Ihrer Domain eingesperrt und php kann nur in diesem Verzeichnis ausgeführt werden.