我一直很疯狂......
我在我的CentOS服务器上安装了gnupg,我尝试加密上传的文件(通过PHP页面上传)。在服务器上通过命令行,它完美地工作。但是通过php脚本,它失败并出现此错误:
gpg: /path-to-my-file/my-file: encryption failed: file open error
用户apache(我认为用于运行exec命令)在文件目录中具有读/写功能。
文件上传得很好(我之后可以看到它从我的代码中删除了未加密的文件),可以通过php网站正确删除。
我运行的命令是以下
/path-to-gpg/gpg --homedir=/path-to-my-home-gnupg/.gnupg -e -r therecipient@email the-unencrypted-file
知道如何解决这个问题吗? 感谢
答案 0 :(得分:1)
要检查的一些事项:
system("ls " . escapeshellarg($file))
并检查结果 - 是否找不到文件?没有权限?这将有助于您调试。system("whoami")
以确保PHP按您认为的那样运行。echo "<pre>ls " . escapeshellarg($file) . "</pre>"
然后复制+粘贴命令并从shell运行它,以确保文件的路径符合您的预期。另外,我相信CentOS默认运行SELinux ...如果你安装了它,请检查日志(在/var/log/
中)以查看SELinux是否阻止Apache执行GPG。
答案 1 :(得分:0)
尝试以详细模式运行具有实际apache用户权限的命令:
su apache -c /path-to-gpg/gpg -vv ...