PHP MongoDB GridFS是一種用于存儲(chǔ)和檢索大文件(如圖片、音頻和視頻)的解決方案。它類似于傳統(tǒng)的文件系統(tǒng),但使用了MongoDB數(shù)據(jù)庫作為存儲(chǔ)介質(zhì),因此具有更好的擴(kuò)展性和可靠性。
使用PHP MongoDB GridFS可以輕松地上傳和下載大文件。下面讓我們看一下如何使用PHP MongoDB GridFS來存儲(chǔ)和檢索圖片文件。
//連接MongoDB服務(wù)器 $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017"); //選擇數(shù)據(jù)庫和集合 $db = "mydatabase"; $collection = "mycollection"; //打開文件并將其寫入GridFS $stream = fopen("image.jpg", "rb"); $filedata = new MongoDB\BSON\Binary($stream, MongoDB\BSON\Binary::TYPE_GENERIC); $fileid = $manager->executeCommand($db, new MongoDB\Driver\Command(["file" =>$collection, "metadata" =>["filename" =>"image.jpg"], "chunkSizeBytes" =>262144, "uploadDate" =>new MongoDB\BSON\UTCDateTime(time() * 1000), "length" =>filesize("image.jpg")]), MongoDB\Driver\Query::TYPE_INSERT)->toArray()[0]->_id; //檢索文件并將其保存到文件系統(tǒng) $file = $manager->executeCommand($db, new MongoDB\Driver\Command(["find" =>$collection, "filter" =>["_id" =>$fileid]]), MongoDB\Driver\Query::TYPE_OBJECT)->toArray()[0]; $content = $file->chunks[0]->data->getData(); file_put_contents("image.jpg", $content);
在上面的代碼中,我們首先連接MongoDB服務(wù)器,并選擇數(shù)據(jù)庫和集合。然后,我們使用PHP內(nèi)置的fopen函數(shù)打開一個(gè)圖片文件,并將其寫入GridFS中。我們使用MongoDB\BSON\Binary類將文件數(shù)據(jù)轉(zhuǎn)換為MongoDB可接受的二進(jìn)制數(shù)據(jù),并使用MongoDB\Driver\Command類將其寫入GridFS。在命令中,我們還指定了文件的元數(shù)據(jù),如文件名、塊大小(默認(rèn)為256KB)、上傳日期和文件長度。在寫入成功后,我們可以獲取已分配的文件ID,并用于后續(xù)的檢索操作。
在檢索文件時(shí),我們只需使用已分配的文件ID,調(diào)用MongoDB\Driver\Command類并指定要檢索的集合。在返回的文件對(duì)象中,我們可以訪問文件的元數(shù)據(jù)和塊數(shù)據(jù)。在上面的代碼中,我們只獲取了第一個(gè)塊的數(shù)據(jù),并用file_put_contents函數(shù)將其保存到文件系統(tǒng)中。
除了上傳和下載文件外,PHP MongoDB GridFS還支持文件的刪除和替換。刪除文件只需使用MongoDB\Driver\Command類和已分配的文件ID即可。替換文件與上傳文件類似,只需使用MongoDB\Driver\Command類覆蓋已存在的文件。
總結(jié)來說,PHP MongoDB GridFS是一種非常實(shí)用的解決方案,可用于存儲(chǔ)和檢索大文件。它與MongoDB數(shù)據(jù)庫集成,并具有更好的擴(kuò)展性和可靠性。通過以上的代碼示例,我們可以輕松地了解到PHP MongoDB GridFS的基本用法。