遍历结果 MongoDB 和 GridFS (PHP)
Posted
技术标签:
【中文标题】遍历结果 MongoDB 和 GridFS (PHP)【英文标题】:Iterating through results MongoDB & GridFS (PHP) 【发布时间】:2012-05-17 14:27:40 【问题描述】:我正在使用 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());
?>
谢谢
【问题讨论】:
【参考方案1】:一般来说,如果您在网页上显示图像,您希望有一堆标签,例如<img src="someUrl" />
,然后让每个 someUrl 处理获取单个图像。
【讨论】:
【参考方案2】:使用“find”与“findOne”,这将返回一个您可以使用 foreach 循环遍历的结果集,例如:
$files = $grid->find();
foreach($files as $file) echo $file->someData;
【讨论】:
我试过这个 $files = $grid->find(); foreach($files as $file) echo $file->getBytes(); 虽然它不起作用 如果您想要所有文件,请尝试 find()(注意大括号为空参数)。并且,而不是显示 $file->getBytes();在你的循环中,尝试“print_r($file);”只是为了调试看看你是否得到任何东西。【参考方案3】:您将标题设置为 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 属性。
希望这会有所帮助。
【讨论】:
以上是关于遍历结果 MongoDB 和 GridFS (PHP)的主要内容,如果未能解决你的问题,请参考以下文章