1

ファイルを使用してusingMongoDBに保存しています。私は次の方法でファイルを引き出しています:GridFSPHP

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

$streamPHPであるため、これはクールです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 に答える