Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案

本文为原创,转载请注明出处。

昨天在ubuntu上安装完yar之后发现yar还是不能用,感觉有些不对劲。

通过在微博上请教 @Laruence 大神和公司的大大之后,问题解决了,下面就来分享这一成果。

如果还没有做好安装工作,请看我的上一篇文章,戳这里


前面的文章提到,我在安装完yar之后,在phpinfo()中并没有看到扩展。

同样的,在函数 extension_loaded("yar")  的证明下,也证明没有安装成功。


那么,这到底是为什么呢?


首先,打开 display_startup_errors

打开方式有两种。

第一,修改php.ini ,添加 display_startup_errors = On

第二,在php文件中动态设置。 ini_set(‘display_startup_errors’,1);

然后查看错误日志。

我的Ubuntu的错误日志在 var/log/apache2 ,如果你也和我一样一开始找不到,那么就去翻phpinfo(),在 Environment 下的 APACHE_LOG_DIR,就是系统日志哦。


查看日志


然后我发现了这样的错误。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/yar.so' - /usr/lib/php5/20121212/yar.so: undefined symbol: php_json_decode_ex in Unknown on line 0

这个的意思,就是,没法加载yar.so,json也没加载上啊阿鲁。

这时候,公司的大大告诉我,他在网上也找到了和我相似遭遇的小伙伴。

Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案_第1张图片

大概理解下,就是说,天啦噜,这里有个BUG呀,json的加载方式是通过json.ini中加载的,而php会首先加载php.ini,这样json的加载就会放到最后,但是,memcached的加载必须放到json的后面啊。


问题分析


恩恩,就是这样。

php的加载方式为首先加载php.ini,加载完php.ini中的设置和扩展后,再去加载json.ini,在读取json.ini中,加载了json这个扩展。

这样就造成了,json是最后加载上的,但是不行,我们的一些扩展的加载顺序必须放到json之后。


问题解决


在php.ini中,我们手动将 extension=json.so 写入,让它提前加载,这样就不会触发bug啦。

extension=json.so
extension=msgpack.so
extension=yar.so

重启apache,打开pphinfo(),就能看见鸟哥的大作啦。

Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案_第2张图片

至此,基于RPC的php扩展安装正式完成!


后记


学习依旧是一个不断探索、不断出错、不断改正、不断进步的过程。

我们会越来越强大~!


你可能感兴趣的:(apache,json,Yar)