(PECL mongo >=0.9.0)

MongoGridFS::storeFileStores a file in the database


public mixed MongoGridFS::storeFile ( string $filename [, array $metadata = array() [, array $options = array() ]] )



Name of the file to store.


Other metadata fields to include in the file document.


These fields may also overwrite those that would be created automatically by the driver, as described in the MongoDB core documentation for the » files collection. Some practical use cases for this behavior would be to specify a custom chunkSize or _id for the file.


Options for the store.

Return Values

Returns the _id of the saved file document. This will be a generated MongoId unless an _id was explicitly specified in the extra parameter.


Throws MongoCursorException if the "w" option is set and the write fails.

Throws MongoCursorTimeoutException if the "w" option is set to a value greater than one and the operation takes longer than MongoCursor::$timeout milliseconds to complete. This does not kill the operation on the server, it is a client-side timeout. The operation in MongoCollection::$wtimeout is milliseconds.


Example #1 MongoGridFS::storeFile() with additional metadata

= new MongoClient();
$gridfs $m->selectDB('test')->getGridFS();

$id $gridfs->storeFile('example.txt', array('contentType' => 'plain/text'));
$gridfsFile $gridfs->get($id);


The above example will output something similar to:

array(7) {
  object(MongoId)#6 (0) {
  string(10) "plain/text"
  string(11) "example.txt"
  object(MongoDate)#7 (0) {
  string(32) "c3fcd3d76192e4007dfb496cca67e13b"

See Also

add a note add a note

User Contributed Notes 1 note

mike at eastghost dot com
2 years ago

$options['safe'] = true;

to make Mongo slow down and do inserts sequentially instead of in parallel.

Use case:

I had 274 PDF documents stored on ext3 disk (avg. size was 5MB, none over 20MB)

A PHP loop loaded each PDF, then did a $GridFS->storeFile( $data, $meta );

This caused server to spike from load average of 0.2 to over 20.0

Apparently what was happening is the loop slammed Mongo (then memory, disk) with 274 convert/stores to do all at once.


$GridFS->storeFile( $data, $meta, array( 'safe' => true ) );

made the loop slow down and wait for each insert to finish and be confirmed before going on to next PDF.

Moral: Safe option can be used to maintain sanity and is not always just for data validity.
To Top