29

PHPからMongoDBデータベースに接続しようとしているWebアプリケーションに取り組んでいます。ページの読み込みの90%ではすべてが正常に機能しますが、他の10%では、コレクションを更新しようとすると次の例外がスローされます。

Fatal error: Uncaught exception 'MongoCursorException' with message 'No such file or directory' in D:\webDev\webSites\str\dev3\_global_classes\User.php:40
Stack trace:
#0 D:\webDev\webSites\str\dev3\_global_classes\User.php(40):
   MongoCollection->update(Array, Array, Array)
#1 D:\webDev\webSites\str\dev3\_init\_init.php(8):
   User->__construct(NULL)
#2 D:\webDev\webSites\str\dev3\index.php(3):
   include('D:\webDev\webSi...')
#3 {main} thrown in D:\webDev\webSites\str\dev3\_global_classes\User.php on line 40

PHPコード:

public function __construct($SESSIONID = null) {        
    User::$_users_collection = Main::$_mongo->selectCollection("users");

     ...   

    $query = array('session_id' => session_id());

    $expiry = time() + Main::$_lifetime;
    $data = array(
        'session_id' => session_id(),
        'expiry' => (string)$expiry,
        'ip' => $_SERVER['REMOTE_ADDR']
    );

    $options = array(
        'upsert' => true,
        'safe' => true
    );

    try {
        User::$_users_collection->update($query, array('$set' => $data), $options);
    } catch (Exception $e) {
        throw $e;
    }

    ...
}

Mongoバージョン:

Wed Oct 17 10:53:48 /usr/bin/mongos db version v2.0.7, pdfile version 4.5 starting (--help for usage)
Wed Oct 17 10:53:48 git version: 875033920e8869d284f32119413543fa475227bf
Wed Oct 17 10:53:48 build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41

私のmongoクラスターにはシャードが1つしかなく、phpバージョンは5.4.4、mongoドライバーバージョンは1.2.12です。

4

5 に答える 5

2

エラーコードを確認してください$e->getCode(); 使用:

    try {
        User::$_users_collection->update($query, array('$set' => $data), $options);
    } catch (MongoCursorException $e) {
    echo "error message: ".$e->getMessage()."\n";
    echo "error code: ".$e->getCode()."\n";
    }

そして、エラー コードよりも、Mongo Cursor 例外エラーのリストを確認してください: http://www.php.net/manual/pt_BR/class.mongocursorexception.php

たとえば、エラー コード 3が表示された場合、「これは、RAM が不足しているか、その他の異常な状況を示している可能性があります。」.

注: safe オプションの使用は避けてください。非推奨です。WriteConcern w オプションを使用すると、より多くのオプションも提供されます。

エラーについて: 「カーソルに誤ってアクセスしたり、応答を受信したときにエラーが発生したことが原因です。データベースに情報を送信して応答を待機する操作は、MongoCursorException をスローする可能性があります。唯一の例外は new MongoClient() (新しい接続の作成) です」 、MongoConnectionExceptions のみをスローします。" ( http://php.net/manual/en/class.mongocursorexception.php )

于 2013-06-06T16:37:41.347 に答える
0

Mongo DB ライブラリが PHP.ini にインストールされない

窓用

http://www.php.net/manual/en/mongo.installation.php#mongo.installation.windows https://s3.amazonaws.com/drivers.mongodb.org/php/index.html

Linux の場合

http://www.php.net/manual/en/mongo.installation.php#mongo.installation.nix

これは、PHP経由でmongodbを実行するのに役立ちます

于 2013-05-07T07:19:23.147 に答える
0

どこで発生するのかわかりにくいですが、このページ では、この例外の原因について詳しく説明しています

于 2012-12-06T08:59:22.420 に答える
0

おそらく、実際の MongoDB への接続中に、PHP Mongo Client でエラーが発生します。

別の場所 ( https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/wqcCNQgiJAQ ) で述べたように、VMWare 経由で MongoDB を実行すると、接続の問題が時々発生する可能性があります。

于 2013-05-14T09:05:04.633 に答える