La classe MongoGridFS
(PECL mongo >=0.9.0)
Introduction
Utilitaires de stockage et lecture de fichiers dans la base de données
GridFS est une spécification de stockage que tous les pilotes implémentent. Simplement, il définit deux collections: files, pour les métadonnées du fichier, et chunks pour le contenu du fichier. Si le fichier est volumineux, il sera automatiquement scindé en sous-parties et chacune sera sauvée comme document dans la collection 'chunks' représentant le contenu du fichier.
Chaque document dans la collection 'files' est caractérisé par un nom, une date d'envoi et un hash md5. Il contient aussi un champ unique _id, qui peut être utilisé pour requêter la collection 'chunks' et obtenir le contenu du fichier. Chaque document dans la collection 'chunks' contient des données binaires, un champ files_id qui correspond au _id du fichier, et la position de ce document dans le fichier.
Par exemple, la collection 'files' ressemble à:
<?php
array("_id" => 123456789, "filename" => "foo.txt", "chunkSize" => 3, "length" => 12);
?>
<?php
array("files_id" => 123456789, "n" => 0, "data" => new MongoBinData("abc"));
array("files_id" => 123456789, "n" => 1, "data" => new MongoBinData("def"));
array("files_id" => 123456789, "n" => 2, "data" => new MongoBinData("ghi"));
array("files_id" => 123456789, "n" => 3, "data" => new MongoBinData("jkl"));
?>
Compatibilité entre les différentes langages
Vous devriez être capable d'utiliser n'importe quel fichier créé par MongoGridFS avec n'importe quel driver et vis versa. Cependant, quelques drivers s'attendent à ce que toutes les méta-données associées avec un fichier soivent dans un champ "metadata". Si vous souhaitez utiliser un autre langage, ce peut être une bonne idée de placer les informations souhaitées dans un champ "metadata". Par exemple, au lieu de :
<?php
$grid->storeFile("somefile.txt", array("date" => new MongoDate()));
?>
utilisez quelque chose comme :
<?php
$grid->storeFile("somefile.txt", array("metadata" => array("date" => new MongoDate())));
?>
La famille MongoGridFS
MongoGridFS représente les collections 'files' et 'chunks'. MongoGridFS étend MongoCollection, et une instance de MongoGridFS a accès à toutes les méthodes de MongoCollection, qui agissent sur la collection 'files':
<?php
$grid = $db->getGridFS();
$grid->update(array("filename" => "foo"), $newObj); // update on the files collection
?>
Un autre exemple de manipulation des méta-données:
<?php
// Sauvegarde un fichier
$id = $grid->storeFile("game.tgz");
$game = $grid->findOne();
// Ajoute un compteur de téléchargement
$game->file['downloads'] = 0;
$grid->save($game->file);
// Incrémente le compteur
$grid->update(array("_id" => $id), array('$inc' => array("downloads" => 1)));
?>
Vous pouvez aussi accéder aux objets dans la collection 'chunks' depuis une instance de MongoGridFS:
<?php
$chunks = $grid->chunks; // $chunks est une MongoCollection
$chunks->insert(array("x" => 4));
?>
Il existe des méthodes dans MongoGridFS qui ont le même no que dans MongoCollection mais elles se comportent différement. Par exemple, MongoGridFS::remove() suppriment les objets qui correspondent au critère depuis la collection des fichiers ('files'), ainsi que leur contenu depuis la collection des données ('chunks').
Pour stocker un nouvel enregistrement dans GridFS, il y a plusieurs options. Si vous possédez un nom de fichier, agissez comme cela:
<?php
$grid->storeFile($filename, array("whatever" => "metadata", "you" => "want"));
?>
Si vous avez une chaine d'octets qui n'est pas un fichier, vous pouvez la stocker grâce à MongoGridFS::storeBytes():
<?php
$grid->storeBytes($bytes, array("whatever" => "metadata", "you" => "want"));
?>
Requêter une collection MongoGridFS retourne un MongoGridFSCursor, qui se comporte comme un MongoCursor normal sauf qu'il retourne des MongoGridFSFiles plutôt que des tableaux associatifs.
MongoGridFSFiles peut être écrit sur le disque en utilisant MongoGridFSFile::write() ou récupéré de la mémoire avec MongoGridFSFile::getBytes(). Il n'y a pas de méthode actuellement qui guide les données d'un à l'autre, mais ce n'est pas très difficile à écrire en utilisant $grid->chunks de la collection.
Les objets MongoGridFSFile contiennent un champ file qui contient les méta-données du fichier.
Synopsis de la classe
NULL
;NULL
;$bytes
[, array $metadata
= array()
[, array $options
= array()
]] ) : mixedVoir aussi
- Documentation coeur de MongoDB sur » GridFS
- Article sur les solutions LightCube sur » la sauvegarde des téléchargements utilisateurs
- Article sur les solutions LightCube sur » l'ajout de méta-données aux fichiers
Sommaire
- MongoGridFS::__construct — Crée une nouvelle collection de fichiers
- MongoGridFS::delete — Efface un fichier et ces morceaux depuis la base de données
- MongoGridFS::drop — Efface les collections de fichiers
- MongoGridFS::find — Interroge un fichier
- MongoGridFS::findOne — Lit un fichier unique satisfaisant les critères
- MongoGridFS::get — Récupère un fichier depuis la base de données
- MongoGridFS::put — Stocke un fichier dans la base de données
- MongoGridFS::remove — Efface des fichiers et leurs morceaux de la base de données
- MongoGridFS::storeBytes — Stocke une chaîne d'octets dans la base de données
- MongoGridFS::storeFile — Stocke un fichier dans la base de données
- MongoGridFS::storeUpload — Stocke un fichier téléchargé dans la base de données
Version en cache
22/11/2024 18:09:22 Cette version de la page est en cache (à la date du 22/11/2024 18:09:22) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-class.mongogridfs.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.