我在使用 PHP exec() 函数时遇到困难。它似乎没有调用某些功能。例如,代码 echo exec('ls');
不产生任何输出(它应该,目录中有文件)。这对我来说是个问题的主要原因是我正在尝试从 PHP exec() 调用执行 .jar。
据我所知,我正在正确调用 java 程序,但没有得到任何输出。 .jar 可以从服务器上的命令行执行。 (为了记录,它是一个 apache 服务器)。
我的 .jar 执行的 php 看起来像这样:
$output = array();
exec('java -jar testJava.jar', $output);
print_r($output);
我从这个 exec() 调用中得到的输出是 Array()
。
我成功地使用 exec() 执行了 'whoami'
和 'pwd'
。我不明白为什么有些功能有效而有些功能无效。我也不是最有 PHP 经验的人,所以我不太确定如何诊断问题。我们将不胜感激。
最佳答案
无法执行ls的原因是权限问题
如果您以用户A 的身份运行网络服务器,那么您只能ls那些对用户A 具有权限的目录。
您可以更改目录的权限,也可以通过更改 httpd.conf 文件来更改运行服务器的用户(我假设您使用的是 apache)。
如果您要更改目录的权限,请确保您也更改了父目录的权限。
要更改网络服务器用户,请按照以下步骤操作:
打开以下文件:
vi /etc/httpd/conf/httpd.conf
搜索
User apache
Group apache
更改用户名和组名。更改用户和组后,使用以下命令重新启动服务器。
/sbin/service httpd restart
然后您将能够执行该用户可以运行的所有命令。
编辑:
“用户”应该是 httpd.conf 中的非根用户。默认情况下,Apache 在以根用户身份运行时不提供页面服务。您必须将用户设置为非根用户,否则会出错。 如果你想强制 apache 以 root 身份运行,那么你必须设置一个环境变量,如下所示:
env CFLAGS=-DBIG_SECURITY_HOLE
然后您必须重建 apache,然后才能以 root 身份运行它。
关于PHP exec() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147643/