PHP shell_exec,执行-rwxrwxrwx shell脚本的权限被拒绝

时间:2011-12-29 13:07:44

标签: php permissions shell-exec poppler pdf-to-html

我目前在运行Apache网络服务器的远程CentOS 5.6系统上使用ssh。我需要使用poppler pdftohtml二进制文件,遗憾的是,该二进制文件当前未安装在该计算机上。所以我下载了poppler包并在我的用户文件夹下构建它。因为我不是系统管理员,所以我没有做

make install

我将所有已编译的文件都放在

/users/myfolder/poppler-0.18.2/

我需要通过php shell_exec()执行的文件是

/users/myfolder/poppler-0.18.2/utils/pdftohtml

如果我通过ssh bash执行它,我会得到正确的输出。相反,如果我把这一行放在php脚本上:

echo shell_exec("/users/myfolder/poppler-0.18.2/utils/pdftohtml");

我得到以下输出:

sh: /users/myfolder/poppler-0.18.2/utils/pdftohtml: Permission denied

我尝试将777设置为文件权限,目前为-rwxrwxrwx。我还注意到使用shell_exec("whoami");会导致“apache”。如果文件权限是-rwxrwxrwx,apache是​​否应该能够执行脚本?

我也知道通过make install安装poppler可以解决问题,但由于这是出于测试目的,我希望避免在我的个人文件夹外“污染”系统,直到测试完成。

感谢任何有帮助的人!

1 个答案:

答案 0 :(得分:9)

仅仅因为文件对用户来说是可执行的并不意味着用户实际上能够执行该文件。用户还需要能够“访问”文件:用户需要所有“父目录”的执行权限,例如/ users,myfolder,poppler-0.18.2和utils。

假设/ users与/ home基本相同,每个人都应该有+ x。从那里,你可以设置它:只需做chmod o+x /users/myfolder /users/myfolder/poppler-0.18.2 /users/myfolder/poppler-0.18.2/utils

(注意:这将使所有人能够执行此二进制文件,而不仅仅是Apache。)

如果apache用户和你共享一个组,最好使用chown poppler目录,并将所有内容归该组所有,并设置g + x而不是o + x。