我試圖使用GridFS的插入一堆PDF格式的文件轉換成MongoDB中,卻得到了一個MongoGridFSException
與消息:錯誤路徑,其中名是設置文件名文件系統上的pdf文檔的絕對路徑。插入文件
我用一個很簡單的CLI腳本:
$it = new DirectoryIterator(__DIR__ .'/files');
while ($it as $file) {
$grid->storeFile($file->getPathname(), array('metadata' => $metadata));
}
我覺得缺乏GridFS的令人不安的文檔。 MongoGridFS和storeFile()中的例子都只是顯示一個簡單的文件名作爲第一個參數;如果數據是從這個文件名中檢索的,那麼腳本假定什麼basePath(cwd
,__DIR__
或者完全不同的東西?)或者我可以只添加絕對路徑(根據錯誤消息判斷,可能不是)?
我在考慮用storeBytes(file_get_contents($file->getPathname())
來代替,但是如果沒有文件名與它關聯,我該如何檢索文件?我是否在第二個參數(options-array)中添加文件名?
此外,如果我想知道存儲文件的地雷/類型,是否必須手動在元數據中指定它或在插入文件時自動確定?
TL; DR:我不知道如何使用GridFS,而且php-docs的質量很差。至少可以有人指出更好的示例/文檔?
我正要編輯問題。看起來好像某種編碼問題弄亂了路徑中的char並導致了最初的問題不幸的是,當我現在運行我的腳本時,返回「Segmentation fault」,它似乎來自MongoDB,而不是PHP,而且是可能是由於'$ extras'中的某些內容。 – dbrumann 2012-03-19 12:06:55
嘗試對發送給MongoDB的內容執行var_dump,然後在Mongo shell中重新創建該命令 - 然後查看是否出現seg錯誤。另外,看看你使用的是什麼版本的MongoDB,看看有沒有使用MongoDB PHP擴展版本的任何已知問題(從phpinfo()獲取這個) – 2012-03-19 12:11:13
你可以從我的例子中看到哪些字段是自動添加的,需要添加哪些字段。在我的例子中,我實際上覆制了長度屬性(並將其稱爲「大小」)。如果需要,您需要添加MIME類型。您可能需要保存文件名,而不需要以後使用的路徑。 – 2012-03-19 12:15:15