我目前在运行Apache web服务器的远程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可以解决问题,但由于这是为了测试目的,我想避免"污染"我个人文件夹外的系统,直到测试完成。
感谢所有帮助我的人!
仅仅因为一个文件对用户来说是可执行的并不意味着用户实际上能够执行该文件。用户还需要能够"获取"文件:用户需要所有"父目录"的执行权限,在你的例子中是/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。