我已经在 SO 中问过这个问题,但也许这里更适合问。我通过 Pecl 安装了 GnuPG。生成 pub/priv 密钥等。我有php.ini
extension=gnupg.so
当我尝试运行简单的代码时,我遇到了未定义的 gnupg_init() 错误,据我所知,这意味着未加载模块。
Fatal error: Uncaught Error: Call to undefined function gnupg_init()
这是我试图运行的代码
putenv('GNUPGHOME=/home/stan/.gnupg');
$res = gnupg_init();
gnupg_seterrormode($res,GNUPG_ERROR_WARNING);
gnupg_addencryptkey($res,"myfingerprint");
$enc = gnupg_encrypt($res, "just a test");
echo $enc;
系统是ubuntu + apache。这里是权限.gnupg/
srwxrwxr-x 1 stan stan 0 Aug 16 08:12 S.gpg-agent
-rw------- 1 stan stan 32 Aug 16 10:02 pubring.kbx~
drwx------ 2 stan stan 4096 Aug 16 10:04 private-keys-v1.d
-rw-rw-r-- 1 stan stan 1361 Aug 16 10:04 pubring.kbx
drwx------ 2 stan stan 4096 Aug 16 10:04 openpgp-revocs.d
-rw------- 1 stan stan 2603 Aug 16 10:19 secring.gpg
-rw------- 1 stan stan 1209 Aug 16 10:19 pubring.gpg~
-rw------- 1 stan stan 1360 Aug 16 10:19 trustdb.gpg
-rw------- 1 stan stan 600 Aug 16 10:19 random_seed
-rw------- 1 stan stan 1209 Aug 16 10:19 pubring.gpg
这是我的 /var/www/
drwxrwsr-x 3 stan www-data 4096 Jul 14 11:23 www
drwxr-sr-x 7 stan www-data 4096 Aug 16 09:59 html
我还确认已安装并加载
$ php --info | grep gnupg
gnupg
gnupg support => enabled
这可能取决于您使用的存储库和可用的软件包。如我的评论中所述,当您运行 phpinfo(); 在 php 脚本中并从浏览器加载它,您会看到 mod_php 没有加载 gnupg 扩展。
在我的 CentOS 服务器上,我们使用 Remi repos for PHP。他有一个名为 php-pecl-gnupg 的包。当我安装它时,它会为 mod_php 安装必要的共享对象,我可以确认它对我的 Web 代码可用。
所以我们已经看到 apache 中的命令行 php 和 mod_php 不会加载相同的配置,所以这样做
php --info
并不一定会显示 Apache 中的 mod_php 配置了什么。查看您的 phpinfo() 文件并查看它正在读取的配置文件(它显示在前几行中)。然后确保您extension=gnupg.so
在该配置文件中,并确保它在同一目录中查找扩展名。