使用PHP调用gnupg出现问题(Apache失败,CLI正常)

3
我正在使用MAMP 2.2,PHP 5.3.5,在OSX 10.8.5上。最近安装了gpgme、gnupg,需要处理下载和构建依赖关系的问题,但我相信一切都已经安装好了。同时也安装了GPGTools。
我编写了两个相当简单的PHP脚本,一个用于导入在其他地方生成的公钥,另一个用于列出密钥环中的密钥。密钥环的位置是/Users/myuser/.gnupg。
MAMP Apache被配置为以我(myuser)的身份运行。当我使用PHP CLI执行我的任一脚本时,它们都能够正常运行并按预期工作。但当我在Apache中执行时,它们运行,var_dumped和echo’d的值都看起来正确,但gnupg->import()仅记录“导入失败”,而gnupg->keyinfo()则显示“无法初始化密钥列表”。
我尝试设置尽可能开放的权限在.gnupg目录和其内容上,但并没有成功。
列出密钥的代码:
<?php

error_reporting(-1);
// set path to keyring directory
putenv('GNUPGHOME=/Users/myuser/.gnupg');
var_dump(getenv('GNUPGHOME'));
echo exec('whoami');
echo is_dir('/Users/myuser/.gnupg');
echo '<br/>';
$gpg = new gnupg();
$gpg->seterrormode(GNUPG_ERROR_WARNING);

try {

    $info = $gpg->keyinfo('');
    print_r($info);

} catch (Exception $e) {

    echo 'ERROR: ' . $e->getMessage();

}

我有什么明显的遗漏吗?


你找到解决方案了吗?我整天都在调试,但仍然不明白为什么在 Apache 下运行脚本时密钥导入失败。 - Igor Evstratov
我和你一样有同样的问题。 - Chung Nguyen
我知道你们遇到这个问题已经很多年了,今天我也遇到了,但我最终解决了它!如果你在本地机器上使用php-fpm,请检查配置文件(/usr/local/etc/php/7.3/php-fpm.conf),看看'daemonize'是否设置为no,如果是,则将其更改为yes,然后重新启动php,这就是我在整整一天的尝试中找到的解决方法。 - keepevets
1个回答

0
问题在于Apache使用不同的用户(对于Ubuntu来说是www-data,但我不确定OSX是什么),而.gnupg文件夹只能被所有者访问(chmod 600)。这就是为什么CLI可以工作(因为您已登录为所有者),而Apache不能工作(因为Apache用户不是.gnupg目录的所有者)。
请为Apache用户设置/home文件夹,然后生成它自己的一对gnupg密钥。一旦Apache拥有了自己的密钥,并且您在设置GNUPGHOME环境变量时指向了Apache的文件夹,它就会正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接