Laravel Homestead Mongo安装导致PHP错误未定义符号:php_json_serializable_ce in Unknown in line 0

时间:2016-12-05 16:56:26

标签: php mongodb laravel homestead

  

PHP警告:PHP启动:无法加载动态库   '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so:   未定义的符号:第0行的未知中的php_json_serializable_ce

安装MongoDB后,每当我从终端运行任何php命令时,我都会收到此错误:

  

php artisan

     

php -v

我已经搜索了2天了。我见过这些:

PHP unable to load dynamic library (mongo.so)

https://github.com/mongodb/mongo-php-library/issues/126

我很确定谷歌出现此错误的任何其他解决方案。它们似乎都是针对php5的修复,并不适合我。

我已将extension = mongodb.so添加到ini文件中。

我已经破坏了虚拟机并重新启动了100次。

我正在跑步: 流浪者1.8.5 Laravel Installer版本1.3.3

vagrant@homestead:~$ php -v 

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0 PHP
7.0.13-1+deb.sury.org~xenial+1 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.13-1+deb.sury.org~xenial+1, Copyright (c) 1999-2016, by Zend Technologies
    with blackfire v1.14.1~linux-x64-non_zts70, https://blackfire.io, by Blackfireio Inc.

Mongo已安装并正常运行:

vagrant@homestead:~$ mongo
MongoDB shell version v3.4.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.0
Server has startup warnings: 
2016-12-05T15:32:01.158+0000 I STORAGE  [initandlisten] 
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] 
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] 
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] 
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] 
2016-12-05T15:32:01.204+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-12-05T15:32:01.205+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-12-05T15:32:01.205+0000 I CONTROL  [initandlisten] 
> 

但是我无法阻止这个PHP错误在世界上没有任何东西!!!

2 个答案:

答案 0 :(得分:12)

我认为问题在于mongodb.so依赖于json.so.解决方案是在json.so之后加载mongodb.so。

我猜你正在使用Homestead的自定义Mongo脚本。该脚本在php.ini文件中输出mongodb.so模块,结果是首先加载mongodb.so。 您应该创建一个mongodb.ini文件,其中加载了mongodb.so。

使用内容创建.ini文件:/etc/php/7.0/mods-available/mongodb.ini:

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

优先级为30,因为json得到20(在我的设置中)以确保它之后被加载。

创建ini文件的软链接到/etc/php/7.0/fpm/conf.d,使其可用于Web服务器。

ln -s /etc/php/7.0/mods-available/mongodb.ini 30-mongodb.ini

重新加载网络服务器和php-fpm。

sudo service [your webserver] restart && sudo service php7.0-fpm restart

你完成了!你可以用同样的方式配置cli-version

答案 1 :(得分:3)

我遇到了同样的问题,我通过恢复旧的PECL mongodb版本(1.1.9)解决了这个问题。 version 1.2.0 on November 29th有更新,这就是为什么mongo-php-library也更新为version 1.1.0

这是我做的:

sudo pecl uninstall mongodb
sudo pecl install mongodb-1.1.9
composer update

pecl命令将显示相同的警告,但安装已成功完成。

我希望很快就会修复mongo-php-library,所以我们不会使用较旧的PECL扩展卡。