从PHP运行Bash命令

r0s*_*kar 48 php bash exec

我有一个bash脚本,我通过命令行运行:

./script.sh var1 var2
Run Code Online (Sandbox Code Playgroud)

在我调用某个php文件之后,我正在尝试执行上面的命令.

我现在拥有的是:

$output = shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我尝试过使用execsystem太,但剧本从来没有得到执行.

但是当我尝试运行shell_exec("ls");它确实有效并且$output是所有文件的列表.

我不确定这是因为我正在使用的VPS的限制还是问题是否在其他地方?

Rob*_*t K 72

在调用脚本之前,您可能需要chdir到正确的目录.这样,您可以在调用shell命令之前确保脚本所在的目录.

$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
Run Code Online (Sandbox Code Playgroud)

  • @Andrej:或者使用脚本的绝对路径而不是相对路径。 (2认同)

Hri*_*esh 5

您的shell_exec由www-data用户从其目录中执行.你可以试试

putenv("PATH=/home/user/bin/:" .$_ENV["PATH"]."");
Run Code Online (Sandbox Code Playgroud)

您的脚本位于/ home/user/bin中的位置 稍后您可以

$output = "<pre>".shell_exec("scriptname v1 v2")."</pre>";
echo $output;
Run Code Online (Sandbox Code Playgroud)

显示命令的输出.(或者,如果没有导出路径,请尝试提供脚本的完整路径,而不仅仅是./script.sh