0
点赞
收藏
分享

微信扫一扫

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

影子喵喵喵 2022-02-24 阅读 57


昨天在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 扩展遇到的问题以及解决方案_json

大概理解下,就是说,天啦噜,这里有个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 扩展遇到的问题以及解决方案_php_02

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


后记


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

我们会越来越强大~!



举报

相关推荐

0 条评论