当前位置:  开发笔记 > 编程语言 > 正文

mongo.so:>未定义的符号:php_json_encode在未知的第0行.安装后的mongo驱动程序为php

如何解决《mongo.so:>未定义的符号:php_json_encode在未知的第0行.安装后的mongo驱动程序为php》经验,为你挑选了2个好方法。

安装Mongo 2.6.0成功后,我尝试使用以下命令升级php mongo驱动程序ubuntu 12.04:sudo pecl upgrade mongo.它开始成功:

downloading mongo-1.5.1.tgz ...
Starting to download mongo-1.5.1.tgz (188,885 bytes)
.........................................done: 188,885 bytes
117 source files, building
running: phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
Build with Cyrus SASL (MongoDB Enterprise Authentication) support? [no]:

我选择的地方,No因为当我尝试是,它失败了,错误.没有我能够成功安装它,结束消息看起来像这样:

Build process completed successfully
Installing '/usr/lib/php5/20121212/mongo.so'
install ok: channel://pecl.php.net/mongo-1.5.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini

在此之后我重新启动了apache(2.4.9),但是我phpinfo()告诉我没有安装mongo.另一方面,我可以extension=mongo.so在我的php.ini中清楚地看到.

我检查了我的error.log,我可以在那里看到以下行:

PHP警告:PHP启动:无法加载动态库'/usr/lib/php5/20121212/mongo.so' - /usr/lib/php5/20121212/mongo.so:未定义符号:php_json_encode在第0行的未知

我检查了一下/usr/lib/php5/20121212/,看到实际上有一个文件mongo.so.我用谷歌搜索了它,我能找到的唯一类似的东西是这个,这不是真正相关的,但没有其他选择我仍然尝试在那里步骤没有成功.

有谁知道如何解决这个问题?



1> Neil Lunn..:

问题在于加载顺序,因此需要在加载之前mongo.so加载json扩展.

由于其他人可能会遇到这个问题,我将概述整个过程:

在您的/etc/php/mods-available目录中(或适当的平台)创建一个单独mongo.ini的以下内容:

; configuration for php mongo module
; priority=30
extension=mongo.so

mongo.so从其他文件中删除任何其他引用,例如php.ini

根据需要在每个cliapache2目录中创建符号链接,以便使用:

sudo ln -s ../../mods-available/mongo.ini 30-mongo.ini

在这结束时,你应该有一个看起来像这样的结构

$/etc/php5$ tree
.
??? apache2
?   ??? conf.d
?   ?   ??? 05-opcache.ini -> ../../mods-available/opcache.ini
?   ?   ??? 10-pdo.ini -> ../../mods-available/pdo.ini
?   ?   ??? 20-json.ini -> ../../mods-available/json.ini
?   ?   ??? 20-readline.ini -> ../../mods-available/readline.ini
?   ?   ??? 30-mongo.ini -> ../../mods-available/mongo.ini
?   ??? php.ini
??? cli
?   ??? conf.d
?   ?   ??? 05-opcache.ini -> ../../mods-available/opcache.ini
?   ?   ??? 10-pdo.ini -> ../../mods-available/pdo.ini
?   ?   ??? 20-json.ini -> ../../mods-available/json.ini
?   ?   ??? 20-readline.ini -> ../../mods-available/readline.ini
?   ?   ??? 30-mongo.ini -> ../../mods-available/mongo.ini
?   ??? php.ini
??? mods-available
    ??? json.ini
    ??? mongo.ini
    ??? opcache.ini
    ??? pdo.ini
    ??? readline.ini

这确保了在"mongo"模块之前动态加载器将加载"json"扩展.

但基本上删除了mongo.so"php.ini"并将其放在自己的文件中,加载顺序比json扩展名更高.然后它会工作.

这可能需要一个JIRA,因为我相信它已经出现过了.

更新:实际上是一个开放的JIRA PHP-1052



2> 小智..:

我的系统是centos 6.3.我解决了问题.

vim /etc/php.ini

然后加

extension=json.so

之前

extension=mongo.so

最后重启php-fpm和nginx(apache)

service php-fpm restart
service ngxin restart

没关系!

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有