PHP exec() 无法正常工作

标签 php apache unix exec

我在使用 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/

相关文章:

javascript - Zip 文件 - 下载 - 然后解压缩

apache - CodeIgniter 包含来自应用程序的 js、css 文件返回 403 禁止

python - Linux Apache Django 视频静态文件问题

linux - 使用 awk 检查来自不同行的变量

c - 无法理解命令行参数指针

php - 如何让Gmail像加载进度条一样

php - 在离线/桌面应用程序中呈现网页内容

PHP代码没有被执行,但代码显示在浏览器源代码中

c++ - int的C赋值

php - 在 PHP 中执行多个 MySQL 查询的更有效方法