我目前在一个运行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”);结果是“阿帕奇”.如果文件权限是-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.