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也没加载上啊阿鲁。

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

大概理解下,就是说,天啦噜,这里有个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(),就能看见鸟哥的大作啦。

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

后记


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

我们会越来越强大~!

时间: 2024-10-28 20:16:39

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

Ubuntu下安装redis的2种方法分享_Redis

前言 redis是目前公认的速度最快的基于内存的键值对数据库,但redis的缺点也非常明显,仅提供最基本的hash set, list, sorted set等基于数据类型,不分表,没有schema,没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore)和连接间接实现,操作不便,开发效率低,可维护性不佳: 因此一般不将其视为完整的数据库单独使用,很多网站将redis作为高速缓存和session状态存储层,然后再与其他数据库搭配使

《循序渐进学Docker》——3.3 在Ubuntu下安装Docker

3.3 在Ubuntu下安装Docker 通过GNU GRUB选择进入Ubuntu系统,配置好网络. 先通过下面命令更新一下apt软件源. sudo apt-get update 安装Docker有两种方式. 方法一:从apt源安装docker.io,但版本比较旧. sudo apt-get install docker.io 方法二:使用官方提供的安装脚本,可以安装最新版本的Docker,推荐使用这种安装方式,安装命令如下: sudo apt-get install curl curl -sS

bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功!

问题描述 bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功! bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功! 解决方案 参考下http://wenku.baidu.com/link?url=NgJF6QDZ7Dnl3rLlCiWtPRP9MMnOVDhNqGkL2ceC5ZwWQ-adUTNS-Dm8mKSVtInWTnUSZfsg5dZ5E7OskbwDW7H7bp3EN9ogz8q5nDd_BgO 解决方案二: 先说说什

Ubuntu下安装Go语言开发环境及编辑器的相关配置_Golang

安装 Windows下是直接的安装包,这里我们略过,来看一下Ubuntu下安装Go: sudo add-apt-repository ppa:gophers/go sudo apt-get update sudo apt-get install golang-stable 或 sudo apt-get install golang 或者直接下载go语言安装包 环境配置: vi /etc/profile 加入 export GOROOT=/usr/lib/go export GOARCH=386

Ubuntu下安装mysql与mysql workbench

其他相关链接 Ubuntu 安装jdk:[链接] Ubuntu安装eclipse:[链接] Ubuntu下安装mysql与mysql workbench:[链接] Ubuntu配置tomcat9:[链接] 1.sudo apt-get install mysql-server 安装完成,下面测试一下,输入: mysql -u root -p 提示输入密码,输入密码之后: 2.安装mysql workbench 下载好安装包之后执行如下命令(先cd到当前目录): sudo dpkg -i mysq

ubuntu下安装cloudstack

问题描述 ubuntu下安装cloudstack 到配置mysql的步骤,到初始化数据库cloud时在命令行输入以下命令: sudo cloud-setup-databases cloud:123456@localhost --deploy-as=root:123456 -e file -m cloudstack -k cloudstack 后,自动执行时老是到这里就出错(如下) Applying /usr/share/cloud/setup/create-schema-premium.sql

Ubuntu下安装 编译项目

在Ubuntu下安装GCC和其他一些Linux系统有点不一样.   方法一: sudo apt-get build-depgcc   方法二: sudo apt-get install build-essential   安装完了可以执行   gcc--version   命令来查看版本.     编译则使用gcc命令.要往下学习首先就得熟悉gcc命令的用法.   gcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击

linux下安装php扩展memcache的方法_Linux

memcache 的工作就是在专门的机器的内存里维护一张巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率,减轻后端数据库的读写压力. 实验环境:centos 6.6 x86_64 LAMP环境搭建完毕:php版本5.6.8.apache版本2.4.12    1.在安装memcached之前需要安装libevent支持: # wget http://syslab.comsenz.com/downloads/linux/libevent-1.4.12-stable.

python-Samba在Ubuntu下安装问题

问题描述 Samba在Ubuntu下安装问题 Samba安装配置./configure --prefix=/usr/local 提示error: could not find Python headers 在终端机输入如下命令之后 sudo apt-get install python-dev 仍是同样报错提示,求解? "/home/nelson/software/Python-2.6.5/Objects/complexobject.c:149: undefined reference to l