我有一个bash脚本,我通过命令行运行:
./script.sh var1 var2
我在调用某个php文件后尝试执行上面的命令。
我现在拥有的是:
$output = shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";
但它不起作用。我也尝试使用exec
和system
,但脚本从未执行过。
但是,当我尝试运行shell_exec("ls");
时,它确实有效,$output
是所有文件的列表。
我不确定这是因为我正在使用的VPS限制还是问题出在其他地方?
答案 0 :(得分:70)
在调用脚本之前,您可能需要chdir到正确的目录。这样,您可以在调用shell命令之前确保脚本处于哪个目录中。
$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
答案 1 :(得分: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
答案 2 :(得分:0)
检查是否未在php.ini中设置open_basedir或在域中使用.htaccess。那会在你的域目录中监禁你,php将只获得在这个目录中执行的权限。