【问题标题】:PHP 7: MongoDB Driver issuePHP 7:MongoDB 驱动程序问题
【发布时间】:2017-04-24 09:39:42
【问题描述】:

我在尝试安装 MongoDB PHP 库时遇到了错误:

$ composer require "mongodb/mongodb=^1.0.0"

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 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 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 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

当我执行phpinfo() 时,我可以看到以下内容:

mongodb

mongodb support enabled
mongodb version 1.2.1
mongodb stability   stable
libmongoc version   1.5.0
libbson version 1.5.0

当我执行 locate mongodb.so 时,这是我的 mongodb.so 文件所在的位置:

/usr/lib/php/20151012/mongodb.so

我注意到,这是20-mongodb.ini 文件所在的路径:

/etc/php/7.0/apache2/conf.d

另外,sudo pecl mongodb install 返回以下内容:

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 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 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 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

sudo pecl info mongodb 返回:

About pecl.php.net/mongodb-1.2.1
================================
Release Type          PECL-style PHP extension (source code)
Name                  mongodb
Channel               pecl.php.net
Summary               MongoDB driver for PHP
Description           The purpose of this driver is to provide
                      exceptionally thin glue between MongoDB
                      and PHP, implementing only fundemental and
                      performance-critical components
                      necessary to build a fully-functional MongoDB
                      driver.
Maintainers           Hannes Magnusson <bjori@php.net> (lead)
                      Jeremy Mikola <jmikola@php.net> (lead)
                      Derick Rethans <derick@php.net> (lead)
Release Date          2016-12-07 18:25:03
Release Version       1.2.1 (stable)
API Version           1.2.1 (stable)
License               Apache License
                      (http://www.apache.org/licenses/LICENSE-2.0)
Release Notes         ** Bug
                          * [PHPC-848] - Fix BSON encoding of
                      immutable arrays and documents with circular
                      references
Required Dependencies PHP version 5.4.0-7.99.99
                      PEAR installer version 1.4.8 or newer
package.xml version   2.0
Last Modified         2016-12-09 00:28
Previous Installed    1.2.0
Version

我在 Google 上搜索了几个小时,但仍然一无所获。谢谢。

【问题讨论】:

    标签: php mongodb apache


    【解决方案1】:

    首先键入此命令/usr/bin/php-config 以查看扩展目录的位置。
    你会看到类似--extension-dir [/usr/lib/php/20131226] 比那个文件夹中的ls 看看mongo.so 是否在那里,如果没有把它放在那里。
    键入whereis php 以在CLI 中找到您正在使用的php
    编辑 CLI 的 php.ini 并添加 extension=mongo.so

    【讨论】:

    • 感谢您的回答。我的扩展目录在这里:/usr/lib/php/20151012mongodb.so 在那里(不是mongo.so,因为它已被弃用)。无论如何,这里是加载的配置文件:/etc/php/7.0/apache2/php.ini 以及以下目录中的附加 ini 文件 /etc/php/7.0/apache2/conf.d 其中20-mongodb.ini 文件是。
    • 嗨,您必须在/etc/php/7.0/cli/php.ini 中添加extension=mongodb.so,它应该可以工作。
    • 谢谢。我整天都在解决这个问题,但仍然没有。当我输入 php --ini 时,我只是收到以下错误: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 无论如何,这可能是一个解决方案:derickrethans.nl/undefined-symbol.html 但仍然没有。
    • 我认为这是一个不同的错误,你可以参考here
    【解决方案2】:

    使用1.1.9 mongodb版本:

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

    【讨论】:

      【解决方案3】:

      是的,有很好的答案。 这是我在 php7.1 中安装 mongo 所做的。我正在使用 ubuntu16.04 64bit:

      sudo aptitude install -y php7.1-dev pkg-config
      sudo -H pecl channel-update pecl.php.net
      sudo aptitude install -y libcurl4-openssl-dev pkg-config libssl-dev libsslcommon2-dev
      sudo pecl install mongodb
      echo 'extension=mongodb.so' | sudo tee /etc/php/7.1/fpm/conf.d/30-mongodb.ini
      echo 'extension=mongodb.so' | sudo tee /etc/php/7.1/cli/conf.d/30-mongodb.ini
      sudo systemctl restart php7.1-fpm.service
      

      这一切都是为了 nginx。如果您使用的是apache,请添加:

      echo 'extension=mongodb.so' | sudo tee /etc/php/7.1/apache2/conf.d/30-mongodb.ini
      

      还有一个。如果您在使用 mongo 时仍然出现错误。类似的东西:

      PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/mongodb.so' - libssl.so.1.0.2: cannot open shared object file: No such file or directory in Unknown on line 0
      

      不要绝望,运行以下命令:

      sudo pecl uninstall mongodb
      sudo pecl install mongodb
      

      【讨论】:

        【解决方案4】:

        我是 @Andrinux 和 @J.C. Gras 的建议,我收到了一个错误 phpize not found

        所以我做了研究,发现了这个How to install and run phpize。这是因为我的系统上没有安装php-dev,所以我安装了它。

        按顺序,我做到了:

        // Ubuntu 20.04.3
        $ sudo apt-get update
        $ sudo apt install php-dev
        $ sudo pecl install mongodb (at the time, it installed mongodb-1.10.0)
        

        如果您看到此消息,则扩展程序已成功安装

        Build complete.
        Don't forget to run 'make test'.
        
        running: make INSTALL_ROOT="/tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0" install
        Installing shared extensions:     /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php/20200930/
        running: find "/tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0" | xargs ls -dils
        52067    4 drwxr-xr-x 3 root root    4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0
        52629    4 drwxr-xr-x 3 root root    4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr
        52630    4 drwxr-xr-x 3 root root    4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib
        52631    4 drwxr-xr-x 3 root root    4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php
        52632    4 drwxr-xr-x 2 root root    4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php/20200930
        52627 8708 -rwxr-xr-x 1 root root 8916120 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php/20200930/mongodb.so
        
        Build process completed successfully
        Installing '/usr/lib/php/20200930/mongodb.so'
        install ok: channel://pecl.php.net/mongodb-1.10.0
        configuration option "php_ini" is not set to php.ini location
        You should add "extension=mongodb.so" to php.ini
        

        别忘了重启 PHP-FPM 和 APACHE 服务器

        【讨论】:

          猜你喜欢
          • 2018-06-20
          • 2016-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-05
          • 1970-01-01
          • 1970-01-01
          • 2016-03-13
          相关资源
          最近更新 更多