PHP + MongoDB + GridFS


6.3.3. MongoDB

6.3.3.1. 安装

sudo pecl install mongo
vim /srv/php/etc/conf.d/mongo.ini
extension=mongo.so

6.3.3.2. GridFS

6.3.3.2.1. 上传文件
<?php
$connection = new MongoClient( "mongodb://neo:[email protected]" );
$db = $connection->test;

$grid = $db->getGridFS();
$id = $grid->put("/etc/passwd");
6.3.3.2.2. 读文件
<?php
$connection = new MongoClient( "mongodb://neo:[email protected]" );
$db = $connection->test;

$grid = $db->getGridFS();
$id = $grid->put("/etc/passwd");

$oid = new MongoId($id);

$file = $grid->get($oid);

echo $file->getBytes();
6.3.3.2.3. storeFile

storeFile 与 put 类似

<?php
$connection = new MongoClient( "mongodb://neo:[email protected]" );
$db = $connection->test;

$grid = $db->getGridFS();
$storedfile = $grid->storeFile("/etc/passwd", array("date" => new MongoDate()));

// Return newly stored file's Document ID
echo $storedfile;
6.3.3.2.4. 查找文件

findOne 与 get 类似,get 只能通过id取出文件,findOne可以查找文件名,日期,尺寸,以及md5值。

<?php
$connection = new MongoClient( "mongodb://neo:[email protected]" );
$db = $connection->test;

$grid = $db->getGridFS();
$file = $grid->findOne("/etc/passwd");

echo $file->getBytes();

指定 collections

<?php

$images = $db->mydb->getGridFS('images');

$image = $images->findOne('jwage.png');

header('Content-type: image/png;');
echo $image->getBytes();
?>
6.3.3.2.5. 遍历文件

findOne一直只返回一条数据,find可以返回结果集,实现遍历文件。

<?php
$connection = new MongoClient( "mongodb://neo:[email protected]" );
$db = $connection->test;

$grid = $db->getGridFS();
$files = $grid->find();
foreach ($files as $file){
	print_r($file);
}


本文节选自《Netkiller PHP 手札》

http://netkiller.github.io/php/index.html

PHP + MongoDB + GridFS 

你可能感兴趣的:(PHP + MongoDB + GridFS)