从PHP运行Bash命令
我有一个bash脚本,我通过命令行像这样运行:
./script.sh var1 var2
我正在尝试执行上述命令后,我打电话给某个PHP文件。
我现在所拥有的是:
$output = shell_exec("./script.sh var1 var2"); echo "<pre>$output</pre>";
但它不工作。 我也使用exec
和system
来尝试它,但脚本从来没有得到执行。
但是,当我尝试运行shell_exec("ls");
它确实工作, $output
是所有文件的列表。
我不知道这是否是因为我使用的VPS的限制,或者如果问题在别的地方?
调用脚本之前,您可能需要chdir到正确的目录。 通过这种方式,您可以在调用shell命令之前确保脚本是“in”的目录。
$old_path = getcwd(); chdir('/my/path/'); $output = shell_exec('./script.sh var1 var2'); chdir($old_path);
您的shell_exec由www-data用户从其目录执行。 你可以试试
putenv("PATH=/home/user/bin/:" .$_ENV["PATH"]."");
脚本位于/ home / user / bin的位置稍后可以
$output = "<pre>".shell_exec("scriptname v1 v2")."</pre>"; echo $output;
显示命令的输出。 (另外,如果没有导出path,请尝试给脚本的整个path,而不是仅仅./script.sh
检查是否没有在你使用的php.ini或.htaccess中设置open_basedir。 这将监禁你的域名目录和PHP将只获得执行这个目录内。