我已经疯了…
我有gnupg安装在我的CentOS服务器上,我试图加密上传的文件(通过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
你知道我该怎么处理这个吗?由于
检查:
- 运行
system("ls " . escapeshellarg($file))
并检查结果-是文件未找到吗?没有权限?这将有助于你调试。 - 运行
system("whoami")
以确保PHP正在运行。 - 运行
echo "<pre>ls " . escapeshellarg($file) . "</pre>"
,然后复制粘贴命令,并从shell中运行它,以确保文件的路径是您期望的。
另外,我相信CentOS默认运行SELinux…如果你已经安装了它,检查日志(在/var/log/
),看看SELinux是否阻止Apache执行GPG。
尝试在详细模式下使用实际的apache用户权限运行命令:
su apache -c /path-to-gpg/gpg -vv ...