PHP+MongoDB: 'No sheat file or directory' 메시지와 함께 'MongoCursorException'이(가) 발견되지 않았습니다.
저는 PHP에서 MongoDB 데이터베이스에 연결하려는 웹 애플리케이션을 작업하고 있습니다.페이지 로드의 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 클러스터에는 하나의 샤드만 있고, 내 php 버전은 5.4.4, 내 mongo 드라이버 버전은 1.2.12입니다.
다음을 사용하여 오류 코드 $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이 부족하거나 다른 비정상적인 상황이 발생했음을 나타낼 수 있습니다.
참고: 안전 옵션을 사용하지 마십시오. 사용하지 마십시오.Write Concern 옵션을 사용하면 더 많은 옵션도 마찬가지입니다.
오류 정보: "커서에 잘못 접속하거나, 회신을 받는 오류로 인해 발생합니다.데이터베이스에 정보를 보내고 응답을 기다리는 모든 작업은 MongoCursorException을 발생시킬 수 있습니다.유일한 예외는 새 MongoClient()(새 연결 만들기)입니다. 이 경우 MongoConnection만 느려집니다.예외.(http://php.net/manual/en/class.mongocursorexception.php)
어디서 발생하는지 알기 어렵지만, 이 페이지는 이 예외를 발생시킬 수 있는 원인을 자세히 설명합니다.
PHP.ini에 Mongo DB 라이브러리를 설치할 수 없습니다.
창용
http://www.php.net/manual/en/mongo.installation.php#mongo.installation.windows https://s3.amazonaws.com/drivers.mongodb.org/php/index.html
리눅스용
http://www.php.net/manual/en/mongo.installation.php#mongo.installation.nix
이것은 PHP를 통해 mongodb를 실행하는 데 도움이 됩니다.
아마도 PHP Mongo Client가 실제 MongoDB에 연결하는 동안 오류가 발생할 수 있습니다.
다른 곳(groups=#!topic/mongodb-user/wqCNQgiJAQ의 https://groups.google.com/forum/ ?)에서 언급한 것처럼 VMWare를 통해 MongoDB를 실행하면 때때로 연결 문제가 발생할 수 있습니다.
나는 이 오류를 꽤 많이 보았는데, 그것은 다음과 같습니다.
MongoDB는 커서 반복 중에 시간 초과가 발생하면 커서 예외를 발생시킵니다.즉, 큰 데이터 세트에 대해 Mongo에서 쿼리를 실행하면 커서를 할당합니다.그런 다음 커서 위에서 반복하여 한 번에 하나씩 결과를 검색합니다. 이는 일반적인 커서 동작입니다.그러나 충분한 시간이 지난 후에도 여전히 결과를 검색하는 경우 위와 같은 메시지가 표시됩니다.
이에 대한 해결책은 다음 두 가지가 될 수 있습니다.
- (애플리케이션 계층) 결과를 임시 컬렉션으로 검색하고 그 위에 반복합니다(못생김).
- (연결 계층) 쿼리하기 전에 시간 초과를 더 높게 설정합니다(가능하다고 가정하는 것이 훨씬 좋습니다).
결과는 다를 수 있습니다. 행운을 빕니다.
언급URL : https://stackoverflow.com/questions/13274910/phpmongodb-uncaught-exception-mongocursorexception-with-message-no-such-fil
'programing' 카테고리의 다른 글
더 이상 존재하지 않는 원격 분기를 표시하는 'git branch -av' (0) | 2023.06.29 |
---|---|
EF 4.1 예외 "공급자가 공급자 매니페스트를 반환하지 않았습니다.토큰 문자열" (0) | 2023.06.29 |
bin과 gac 둘 다 dll, 어떤 것이 사용됩니까? (0) | 2023.06.24 |
Oracle은 단락 평가를 사용합니까? (0) | 2023.06.24 |
Mongoid 파인더가 작동하지 않나요? (0) | 2023.06.24 |