proc_open() 失败并出现 'Permission denied' 错误提示

3
我正在尝试使用proc_open()执行程序并打印结果。但是,我一直收到“权限被拒绝”的错误提示。我已将脚本和可执行文件的chmod设置为0777,但仍然无效。 ini_get('safe_mode')的值为false。
可能出了什么问题?
我正在使用CentOS、Apache和PHP 5.3.3。

1
你想要执行什么?你(执行 PHP 脚本的用户)有权限执行吗? - Green Black
一个用C语言编写的程序,位于/home/emil/workspace/PKE/Debug/PKE。我该如何给执行PHP脚本的用户权限?我以为将脚本和可执行文件设为0777就足够了。抱歉,我是新手 :) - HelloWorld
创建一个php脚本,输入 <?php exec("whoami"); 你就知道用户是谁了。将该用户放入一个具有执行该文件权限的组中,然后你就可以开始了。 - Green Black
exec("whoami") 返回了一个空白。然而,get_current_user() 返回了 'root' :/ - HelloWorld
echo whoami;已经可用,它返回了“apache”。我将其添加到我的组“emil”中,该组对该程序具有读写权限,但我仍然收到权限被拒绝的错误信息。 - HelloWorld
1个回答

4

我曾经遇到过与这个设置完全相同的问题,后来发现问题是SELinux(默认开启)阻止httpd执行我的外部程序。据我所知,问题在于httpd有自己的域,无法触及其外部的东西。因此,最简单的方法是将你的脚本移动到/var/www目录并重置文件上下文:

restorecon -RF /var/www/

如果不可能实现这一点,您可以在程序中直接更改上下文:
semanage fcontext -a -t httpd_sys_content_t "/path/to/program(/.*)?"

这基本上意味着你的程序属于 httpd。


1
我曾经遇到过完全相同的问题,但我的可执行文件一开始就在/var/www/中,只是我使用了一个包含软链接的绝对路径来调用它(例如路径/home/user/program指向/var/www/program/bin/路径)。我更换了路径并解决了问题。 - Victor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接