【问题标题】:Laravel Homestead Mongo install causing PHP error undefined symbol: php_json_serializable_ce in Unknown on line 0Laravel Homestead Mongo 安装导致 PHP 错误 undefined symbol: php_json_serializable_ce in Unknown on line 0
【发布时间】:2017-04-20 03:33:51
【问题描述】:

PHP 警告:PHP 启动:无法加载动态库 '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0

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

php 工匠

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 文件中。

我已销毁 VM 并重新启动 100 次。

我正在跑步: 流浪者 1.8.5 Laravel 安装程序版本 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 错误在世界上什么都没有!!!

【问题讨论】:

标签: php mongodb laravel homestead


【解决方案1】:

我遇到了同样的问题,我通过恢复到旧的 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 扩展卡住了。

【讨论】:

  • 克里斯是对的。确保在 json 扩展后加载
  • 是的,我看到了,这是一个更好的解决方案。
【解决方案2】:

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

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

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

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

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

创建一个指向 /etc/php/7.0/fpm/conf.d 的 ini 文件的软链接,以使其可用于网络服务器。

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

【讨论】:

  • 这也适用于 php 7.1,只需将路径中的 7.0 换成 7.1。
  • 像魅力一样工作! :D 我整个上午都在寻找解决方案!谢谢! PS.:我没有配置cli版本。有必要吗?
  • Cli-version 仅在您使用使用 cli(在后台)的包时才需要。例如,通过 composer 安装 moloquent(Laravel 的 mongo)需要 cli。
  • 不起作用。在 php 7.1 的 CLI 上仍然出现相同的错误。已经重启了php7.1-fpm和nginx
猜你喜欢
  • 2014-05-22
  • 2016-10-29
  • 2013-06-27
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
相关资源
最近更新 更多