我正在尝试使用proc_open()
执行程序并打印结果。但是,我不断收到“权限被拒绝”。已将脚本和可执行文件的 chmod 设置为 0777,但无济于事。
ini_get('safe_mode')
是假的。
有什么问题?
我正在使用 CentOS、Apache 和 PHP 5.3.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。
您必须启用 safe_mode 并查看您的 safe_mode_exec_dir。您不能在安全模式执行目录之外执行。如果您在 safe_mode_exec_dir 中有您的程序,则问题是您的共享主机(有时共享主机会禁用 exec 功能)