php安装gnupg扩展

需要在php中使用gpg加密

但是执行时报错

百度之后知道需要安装gnupg扩展[1]。

不认真搜索的代价

下载gnupg扩展及依赖

编译时提示

查看gpgme,是安装了的

没有想太多就按照提示直接去下载gpgme了,并且下载了最新的版本

编译时又有依赖关系

查看libgpg-error,确实是已安装,但是版本是1.7,gpgme-1.5.4要求1.11以上

于是又按照提示下载了最新的libgpg-error和libassuan,编译成功。在php.ini中添加 extension=gnupg.so。但是浏览器访问phpinfo()不能显示页面,命令方式执行会报错,加载链接库有问题

查看扩展需要加载的链接库和rpm安装的依赖文件路径,可以看到加载的还是rpm安装的依赖的路径

但是gnupg.so是用新版本的依赖库编译的,或许是因为这个原因php执行时报错吧。手动重新添加软连接到新版本的库

之后可以正常执行

简单的步骤

真的很麻烦。回到开始,以关键词“Please reinstall the gpgme distribution

[2008-09-18 19:02 UTC] emmett dot keyser at sf dot tribalddb dot com
Hey, I think you need to install gpgme-devel. [2]

换台机器,安装gpgme-devel,之后可以直接成功编译gnupg扩展。

其他问题

一开始lnmp的php和yum安装的php共存,phpize是yum安装的,执行后编译gnupg扩展会默认安装到/usr/lib/php/module目录下,php.ini中设置时需要加路径。

相关知识

安装pecl扩展的方法,仅记录一种。下载扩展源码,用phpize准备编译环境[3]

共享库加载相关知识

这是摘抄《共享库PATH与ld.so.conf简析》
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到 比如安装了一个到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。
3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下 [4]

 参考资料

 

 

One thought on “php安装gnupg扩展

回复 晓梦 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注