今天给一台CentOS系统的服务器上传了一个新的程序之后,发现部分页面显示不出来,或者不完整。查看Apache的错误日志的时候发现了大量的PHP报错提示:
PHP Fatal error: Call to undefined function json_decode()
这是典型的PHP组件未安装出现的提示,错误信息就是找不到某个函数XXX。经查,这个函数是PHP的json扩展包含的。接下来就简单了,只需要安装好json扩展即可消除这个错误,从而使网页恢复正常。
首先尝试最简单的方法,输入yum指令进行安装:yum install php-json,结果提示没有这个扩展包;再次尝试输入yum install json也不行。于是输入yum search php-,列出所有的PHP扩展包进行查找。结果还是没有找到跟json有关的扩展包。
既然yum自己不带,那么就得拿出Linux下的杀手锏——编译了。网上搜索了下相关的文章并自己实战操作了下,发现其实编译个json也并不是很难的事情。于是整理心得如下:
1、切换到tmp目录下载json源码包。进行临时的下载操作进入到tmp目录是个很好的习惯,因为Linux系统在开机的时候会自动清空tmp目录,从而保持硬盘文件的整洁。当然如果你要保留这个源码包的话,可以下载到自己喜欢的目录。
cd /tmp
wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.1.tar.bz2
2、解压缩下载得到的文件:
tar xvjf php-json-ext-1.2.1.tar.bz2
3、进入源码目录:
cd php-json-ext-1.2.1
4、准备编译环境。这一步可以先不做直接进行第5步操作,如果遇到问题后再进行本步检查也无所谓。不过为了避免不必要的麻烦,我们还是检查下编译环境是否准备好了吧!
yum install php-devel automake autoconf libtool gcc
5、准备PHP模块的编译环境:
phpize
6、开始编译json模块:
./configure
make
make install
7、配置php.ini。首先打开php.ini文件:
vim /etc/php.ini
注:这里我的php.ini是在/etc目录下,如果你的php.ini不在这里,请修改路径为你的php.ini所在的路径。
直接在最后一行加上下面这段话:
extension=json.so
然后输入:wq保存退出。
8、重启Apache服务:
/etc/init.d/httpd restart
成功重启之后,可以利用phpinfo()去查看是否有json的信息。我试着打开之前报错的页面,已经完全能正常打开了,一切OK。