2012-03-19 4 views
1

내가 GridFS를 사용하여 MongoDB로 PDF - 파일의 무리를 삽입하지만, 메시지와 함께 MongoGridFSException 얻기 위해 노력하고 있어요 : 이름이있다 경로에 파일 에게 이름을 설정 오류 파일 시스템의 pdf 문서에 대한 절대 경로.파일 삽입

나는 매우 간단한 CLI 스크립트를 사용하고 있습니다 :

$it = new DirectoryIterator(__DIR__ .'/files'); 
while ($it as $file) { 
    $grid->storeFile($file->getPathname(), array('metadata' => $metadata)); 
} 

내가 방해 GridFS에 대한 문서의 부족을 찾을 수 있습니다. MongoGridFSstoreFile()의 예제는 모두 첫 번째 인수로 단순한 파일 이름을 표시합니다. 데이터가이 파일 이름에서 검색되면 스크립트가 수행하는 기본 경로 (cwd, __DIR__ 또는 완전히 다른 무언가가 있습니까?) 또는 절대 경로를 추가 할 수 있습니까?

대신 storeBytes(file_get_contents($file->getPathname())을 사용하려고했으나 파일 이름이 없는데 어떻게 파일을 검색합니까? 두 번째 인수 (options-array)에 파일 이름을 추가합니까?

또한 저장된 파일의 광산/유형을 알고 싶다면 수동으로 메타 데이터에 지정해야합니까? 아니면 파일을 삽입 할 때 자동으로 결정됩니까?

TL : DR : GridFS로 작업하는 방법을 모르고 있으며 php-docs의 품질이 좋지 않습니다. 최소한 누군가가 더 나은 예제/문서를 지적 할 수 있습니까?

답변

3

$ grid-> storeFile()을 호출 할 때 파일의 전체 경로를 사용합니다. 또한 네, 메타 데이터에 MIME 형식을 저장합니다. 그래서, 내 전화는 다음과 같습니다

$id = $grid->storeFile($uploaded_file, 
     array(
      'ownerNodeUuid' => $additional['nodeUuid'], 
      'ownerField'  => $additional['fieldUuid'], 
      'originalFilename' => $name, 
      'type'    => $type, 
      'size'    => $size 
     ), 
     array(
      'safe' => 1 
     )); 

을이이 같은 항목 작성

db.myPrefix.files.findOne(); 
{ 
    "_id" : ObjectId("4ea1912af3e145731c000010"), 
    "ownerNodeUuid" : "74DAB098-4A6F-4172-84AB-EDAFAA9FE22D", 
    "ownerField" : "C58AD24C-7A8C-402A-BE82-2D315BC5F7C0", 
    "originalFilename" : "image001.png", 
    "type" : "image/png", 
    "size" : 73679, 
    "filename" : "/tmp/phpNhAmGK", 
    "uploadDate" : "Fri Oct 21 2011 16:35:06 GMT+0100 (BST)", 
    "length" : 73679, 
    "chunkSize" : 262144, 
    "md5" : "3e36620fdfebdf9fbf311e996a4bc46c" 
} 

, 그래서 = "/ tmp를/phpNhAmGK"이 경우 $의 uploaded_file의를;

희망이 있습니다. 웹에 많은 예제가 있지만, PHP 라이브러리 문서가 약간 희박하다는 점에 동의합니다 ... MongoDB 셸 함수를 둘러싼 간단한 래퍼로 생각하는 것이 가장 좋습니다. 그래서 내가 처음 보는 것은 항상 MongoDB 사이트 자체, 그리고 MongoDB에서 무엇이해야 하는지를 이해할 때, 나는 그 기능의 PHP 버전에 대한 PHP 문서를 찾는다.

+0

방금 ​​질문을 편집하려고했습니다. 어떤 종류의 인코딩 문제가 경로에 문자를 엉망으로 만들어 초기 문제의 원인이 된 것 같습니다. 불행히도 스크립트를 실행하면 PHP가 아니라 MongoDB에서 온 것으로 보이는 "Segmentation fault"가 반환됩니다. 아마'$ extras'의 어떤 것 때문일 것입니다. – dbrumann

+0

MongoDB에 보내는 내용에 var_dump를 수행하고 Mongo 쉘에서 명령을 다시 작성하십시오. 그러면 seg 결함이 있는지보십시오. 또한 사용중인 MongoDB의 버전을 확인하고 사용중인 MongoDB PHP 확장 버전에 알려진 문제가 있는지 확인하십시오. (phpinfo()에서 가져 오기) –

+0

내 예제에서 자동으로 추가되는 필드를 볼 수 있습니다. 어떤 필드를 추가해야하는지 알려줍니다. 내 예제에서는 실제로 length 속성을 복사하고 크기를 'size'라고 부릅니다. 필요한 경우 MIME 형식을 추가해야합니다. 나중에 사용하기 쉽도록 경로없이 파일 이름을 저장하려고 할 수 있습니다. –