2017-10-05 3 views
0

J'essaye de faire un système de notation en utilisant mongodb in php et GridFS. Je peux d'abord écrire des données dans mon fichier mais une fois que je ferme le flux, je ne sais pas comment ajouter des données plus tard. Voilà comment j'écris il:MongoDB GridFS PHP ajouter du texte

$bucket= DB::connection('mongodb')->getMongoDB()->selectGridFSBucket(); 
    $stream = $bucket->openUploadStream('my-file-name.txt'); 
    $contents = 'whatever text here \n'; 
    fwrite($stream, $contents); 
    fclose($stream); 

J'ai essayé retreiving et annexant données dans le flux, mais il ne fonctionne pas. Cette tentative est:

$bucket= DB::connection('mongodb')->getMongoDB()->selectGridFSBucket(); 
    $stream = $bucket->openDownloadStreamByName('my-file-name.txt'); 
    fwrite($stream, $contents); 

également essayé fopen sur le flux, mais pas de chance. Je ne sais pas non plus comment récupérer ce Id de fichier après avoir écrit des données.

Répondre

0

Je n'ai pas trouvé de solution simple à ajouter, j'ai fini par remplacer le fichier précédent par un nouveau fichier et supprimer l'ancien.

$stream = $bucket->openDownloadStream($this->file_id); 
$prev_content = stream_get_contents($stream); 

//delete old data chunks 
DB::connection('mongodb')->collection('fs.chunks')->where('files_id',$this->file_id)->delete(); 
//delete old file 
DB::connection('mongodb')->collection('fs.files')->where('_id',$this->file_id)->delete(); 


$new_content =$prev_content.$dt.$msg."\n"; // append to log body 
$new_filename = $filename_prefix; 
$stream = $bucket->openUploadStream($new_filename); 
fwrite($stream, $new_content); 
fclose($stream); 

$new_file = DB::connection('mongodb')->collection('fs.files')->where('filename',$new_filename)->first();