web-dev-qa-db-ja.com

PHPをバージョン7にアップグレードした後、mongodbドライバを使用できないのはなぜですか?

さて、これが私が見つけた奇妙な状況です。プロジェクトでPHPとMongoDBを一緒に使用し、関連するソフトウェアを更新しました。アップグレード後、新しいconfファイルを更新したことを確認しましたが、すべて問題ありません--- MongoClientクラスを使用しようとすると、次の致命的なエラーが発生します。

致命的なエラー:キャッチされないエラー:クラス 'MongoClient'が/srv/http/test.phpに見つかりません

したがって、私の最初の本能は、_/etc/php/php.ini_をチェックして、mongodb.soが正しく含まれていることを確認することでした。他のextension行の後に見つけました:

_extension=mcrypt.so
extension=Zip.so
extension=mongodb.so ; <--- here it is
_

これがチェックされた状態で、正しいphpinfo()スクリプトをロードして、正しい_php.ini_ファイルを使用していることを確認し、正しいことを確認しました。それだけでなく、mongodbドライバーも正しくロードされているようです!

_Loaded Configuration File      /etc/php/php.ini

mongodb support                enabled
mongodb                        version      1.1.1
mongodb                        stability    stable
libmongoc                      version      1.3.1-dev
libbson                        version      1.3.0
_

そこで、httpdを再起動して再試行しました。サイコロはありませんが、MongoClientクラスが見つかりません。そのため、ディストリビューションのパッケージマネージャーの代わりにpeclからインストールしようとしましたが、状況は上記と同じです。


それで、ここに状況の簡単な要約があります:

  • Linuxカーネル4.3.3
  • PHPバージョン7.0.1
  • php-mongodbバージョン1.1.1
  • 適切に構成されているようで、mongodbが有効になっており、phpinfo()に表示されています。
  • peclと私のディストリビューションのパッケージマネージャーを使用して、mongodbドライバーをインストールしようとしました。

役に立つかもしれない他の情報:

  • MongoDBバージョン3.2.0
  • mongodが実行されています
  • また、再起動してみましたが、変更はありません。
4
dotVezz

さて私は答えを見つけました。

クラスが変更されました。もはや\MongoClient、現在は\MongoDB\Driver\Manager

必要なのはリファクタリングだけです。新しいドライバーは、高レベルの機能をユーザースペースライブラリで満たすための低レベルドライバーになるように設計されているため、php7にアップグレードする他のユーザーは、新しいドライバーに慣れていること、またはユーザースペースを確認してください。あなたがそれをするとき、ライブラリは存在します。うまくいけば、この質問/回答は将来他の人に役立つでしょう。

PHP now: mongo-php-library に使用する大きなMongoライブラリの1つです。

7
dotVezz

おっしゃるように、PHP7からMongoDBと対話するためのクラス構造が変更されたため、コードをリファクタリングする必要があります(最初の計画と記述方法によって大きく異なります)。

あなたが調べたいと思うかもしれない1つの解決策は https://github.com/alcaeus/mongo-php-adapter

古いPHP5コードを適切に動作させるために、ほとんどの場合、アダプタライブラリを含めるだけで十分です。

次に、コードを新しいMongoDBに移行することを強くお勧めしますPHPライブラリ( https://github.com/mongodb/mongo-php-library )または、ネイティブドライバーを使用して、速度の向上を活用することもできます。

3
Tomi
  • まず、MongoDBの公式ウェブサイトに記載されている手順でMongoDBをマシンにインストールする必要があります
  • 次のステップは、PHPで使用するMongoDBドライブをインストールすることです。
  • PHPバージョン5.99.99以前のMongoDBドライバーは次のとおりでした:package/mongoこれをインストールするには使用する必要があります:

    Sudo apt-get install php-pear php5-dev
    
    Sudo pecl install mongo
    
  • PHP 7以降、これは新しいドライバーパッケージ/ mongodbです。これをインストールするには:Sudo pecl install mongodb

  • Laravelフレームワークまたはcomposerを使用したプロジェクトを使用している場合、このライブラリが最も適切です: https://github.com/jenssegers/Laravel-MongoDB Useバージョン3.0.0でPHP 7&Laravel 5をサポートし、それ以外の場合は古いバージョン2.2.2を使用するComposerコマンド:

    composer require jenssegers/mongodb
    
  • コンポーザーなしで他のPHPフレームワークを使用している場合は、次のライブラリを使用してください: https://github.com/mongodb/mongo-php-library これは上記のライブラリ

0
ajayarjunan