1

我正在使用MongoDB并将文件存储到GridFSusing PHP. 我通过以下方式提取文件:

$mongo = new Mongo;
$images = $monogo->my_db->getGridFS('images');
$image = $images->findOne('epic-beard-man.png');
$stream = $image->getResource();

这很酷,因为$stream它是一个 PHP resource。我需要的是确定流/资源是二进制还是文本。如果是文本,我想输出,否则如果是二进制,我不想输出。

是否有一个神奇的功能,如:is_binary($stream)

编辑

echo get_resource_type($stream);

退货STREAM。哼,用处不大。

4

1 回答 1

3

如果不从资源中实际读取,您将无法检查这一点。您可以阅读整个内容并查找不可打印的字符(如果是图像,这应该会很快发生)。您可以使用ctype_print检查“可打印性” ,不幸的是它会返回false制表符和换行符,因此它可能不是最好的。您还可以构建自己的正则表达式来检查数据:

preg_match(':^(\P{Cc}|[\t\n])*$:', $data)

然而,最好和最简单的做法是将数据类型(可能是 MIME 类型)与对象一起保存。这样您就不需要在显示时做任何魔术。

我认为像 MongoDB 这样的无模式数据库在设计阶段至少需要与关系数据库一样多的关注。这是设计数据库时要考虑的一个典型问题:我的数据有什么类型?

于 2012-09-01T06:53:19.753 回答