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

And*_*ega 2 php permissions poppler shell-exec pdf-to-html

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

make install
Run Code Online (Sandbox Code Playgroud)

我的所有编译文件都在

/users/myfolder/poppler-0.18.2/
Run Code Online (Sandbox Code Playgroud)

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

/users/myfolder/poppler-0.18.2/utils/pdftohtml
Run Code Online (Sandbox Code Playgroud)

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

echo shell_exec("/users/myfolder/poppler-0.18.2/utils/pdftohtml");
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

sh: /users/myfolder/poppler-0.18.2/utils/pdftohtml: Permission denied
Run Code Online (Sandbox Code Playgroud)

我尝试设置为777文件权限,目前是-rwxrwxrwx.我也注意到使用shell_exec("whoami");"apache"结果.如果文件权限是-rwxrwxrwx,apache是​​否应该能够执行脚本?

我也知道安装poppler make install会解决问题,但由于这是出于测试目的,我想避免在我的个人文件夹外"污染"系统,直到测试完成.

感谢任何有帮助的人!

Jor*_*rts 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.