我正在使用MongoDB
并使用GridFS
将文件存储到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
。哼,不是很有用。
答案 0 :(得分:3)
如果没有实际读取资源,则无法检查此内容。您可以阅读整个内容并查找不可打印的字符(如果它是图像,则应该很快发生)。您可以使用ctype_print检查“可印刷性”,遗憾的是,它会返回false
标签和换行符,因此它可能不是最好的。您还可以构建自己的正则表达式来检查数据:
preg_match(':^(\P{Cc}|[\t\n])*$:', $data)
然而,最好和最简单的方法是将数据类型(可能是MIME类型)与对象一起保存。这样你就不需要在显示时做任何魔术了。
我认为像MongoDB这样的无模式数据库在设计阶段至少需要像关系数据库那样谨慎。在设计数据库时,这是一个典型的考虑因素:我的数据有哪些类型?