3

我正在尝试使用proc_open()执行程序并打印结果。但是,我不断收到“权限被拒绝”。已将脚本和可执行文件的 chmod 设置为 0777,但无济于事。

ini_get('safe_mode')是假的。

有什么问题?

我正在使用 CentOS、Apache 和 PHP 5.3.3。

4

2 回答 2

3

我在相同的设置下遇到了这个问题,结果证明问题是 SELinux(默认情况下处于打开状态)阻止 httpd 执行我的外部程序。您可以通过以下方式将其置于许可模式,

setenforce permissive

如果您遇到与我相同的问题,那么现在一切都应该正常了。这将持续到您重新启动。

要使更改永久生效,请转到 /etc/selinux/config,然后更改:

SELINUX=enforcing

SELINUX=permissive

编辑:

好的,我找到了一种不需要关闭 SELinux 的方法。据我了解,问题在于 httpd 有自己的域,不能触及它之外的东西。因此,最简单的做法是将您的脚本/程序移动到 /var/www 目录树中。

如果这不可能,您可以改为就地更改程序的上下文:

semanage fcontext -a -t httpd_sys_content_t "/path/to/program(/.*)?"

这基本上会说你的程序属于httpd。

于 2013-02-04T21:59:55.433 回答
0

您必须启用 safe_mode 并查看您的 safe_mode_exec_dir。您不能在安全模式执行目录之外执行。如果您在 safe_mode_exec_dir 中有您的程序,则问题是您的共享主机(有时共享主机会禁用 exec 功能)

于 2012-09-02T00:22:46.350 回答