迭代结果MongoDB& GridFS(PHP)

时间:2012-05-17 14:27:41

标签: php sql mongodb gridfs database

我正在使用GridFS,我目前已经使用findOne显示单个图像,虽然我希望它遍历网格中的所有结果并将它们全部回显到屏幕,这是我正在使用的代码:

<?php
try {
  // open connection to MongoDB server
  $conn = new Mongo;

  // access database
  $db = $conn->database;

  // get GridFS files collection
  $grid = $db->getGridFS();

  // retrieve file from collection
  header('Content-type: image/png');
  $file = $grid->findOne(array('_id' => new MongoId('4fb437dbee3c471b1f000001')));

  // send headers and file data

  echo $file->getBytes();
  exit;  

  // disconnect from server
  $conn->close();
} catch (MongoConnectionException $e) {
  die('Error connecting to MongoDB server');
} catch (MongoException $e) {
  die('Error: ' . $e->getMessage());
}
?>

由于

3 个答案:

答案 0 :(得分:0)

使用“find”vs“findOne”,它将返回一个结果集,您可以使用foreach循环,例如:

  

$ files = $ grid-&gt; find({});

     

foreach($ files as $ file){echo $ file-&gt; someData; }

答案 1 :(得分:0)

一般情况下,如果您要在网页上显示图片,您希望拥有一堆像<img src="someUrl" />这样的标签,然后让每个 someUrl 处理一个图像。

答案 2 :(得分:0)

您将标题设置为image / png,因此浏览器只需要一张图片。

您可以做的是将其更改为text / html文档,并使用数据URI方案嵌入图像(请参阅http://en.wikipedia.org/wiki/Data_URI_scheme),然后以一系列图像标记输出图像。

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>My images</title>
    <head>
    <body>
    <?php
    /* ... db connection/init code ... */

    $files = $grid->find({});

    foreach($files as $file) { 
       $encodedData = base64_encode($file->getBytes());
       echo "<img src=\"data:image/png;base64,{$encodedData}\">";
       echo "<br>";
    }
    ?>
    </body>
</html>

请注意,您可能想要检测图像的mime类型是否相应更改,并使用文件的元数据设置alt,width和height属性。

希望这有帮助。