65

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

./script.sh var1 var2

在调用某个 php 文件后,我正在尝试执行上述命令。

我现在拥有的是:

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

但它不起作用。我也尝试过使用execand system,但脚本从未执行过。

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

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

4

3 回答 3

93

在调用脚本之前,您可能需要chdir到正确的目录。这样,您可以在调用 shell 命令之前确保您的脚本“在”哪个目录。

$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
于 2012-06-15T14:18:03.047 回答
5

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

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

你的脚本在哪里/home/user/bin 稍后你可以

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

显示命令的输出。(或者,在不导出路径的情况下,尝试提供脚本的整个路径,而不仅仅是 ./script.sh

于 2012-06-15T14:18:00.937 回答
0

检查是否没有在您使用的域的 php.ini 或 .htaccess 中设置 open_basedir。这会将您囚禁在您的域目录中,并且 php 将只能访问在该目录中执行。

于 2017-09-22T09:41:23.760 回答