2009-03-10 5 views
12

PHPがASCIIかバイナリかどうかを素早く簡単にチェックする方法はありますか?PHPでファイルがASCIIかバイナリかをチェックする方法

+0

これは前に尋ねられていますが、私はいつも不思議です。アスキーまたはバイナリの場合はどうして気になりますか? – Pyrolistical

+0

類似していますが、重複していません。これは、簡単で、技術的な答えを持っていますが、仮定された同一の質問はかなり困難です。ファイルがXをエンコーディングしているのか、それとも全くエンコーディングされているのかは、大きな違いがあります。 –

+0

もう一度それを読んで、それらのタイプは例に過ぎませんでした。彼は同じことをバイナリとテキストの両方を探しています – Pyrolistical

答えて

18

これはPHP> = 5.3.0でのみ動作し、100%信頼できるわけではありませんが、かなり近いです。

// return mime type ala mimetype extension 
$finfo = finfo_open(FILEINFO_MIME); 

//check to see if the mime-type starts with 'text' 
return substr(finfo_file($finfo, $filename), 0, 4) == 'text'; 

http://us.php.net/manual/en/ref.fileinfo.php

+0

完璧な答え。 + 1 – Cosine

+0

リンクが壊れている:http://php.net/manual/en/book.fileinfo.php –

+1

おそらく 'if(!$ finfo){echo" fileinfoデータベースのオープンに失敗しました ";出口(); '〜'と忘れないでください: 'finfo_close($ finfo);' ... –

2

ASCIIは単なるテキストのエンコードであり、バイナリ表現ではありません。すべてのバイトが128未満であることを確認することもできますが、これがASCIIとしてデコードされることを保証するものではありません。すべてのあなたが知っているそれはいくつかの狂った画像形式、またはまったく別の8ビットのすべてを使用していない全く異なるテキストエンコーディングです。あなたの使用には十分かもしれません。たとえファイルが有効なASCIIであるかどうかを確認したいのであれば、それが "テキストファイル"でなくても、それは間違いありません。

1

あなたはおそらく、ファイルのMIMEタイプをチェックする必要がありますが、あなたはメモリにファイルをロードするために喜んでいる場合は、多分あなたは、バッファが使用するすべての-印刷可能なキャラクタで構成されてかどうかを確認することができ次のようなものです:

<?php 
$probably_binary = (is_string($var) === true && ctype_print($var) === false); 

完璧ではありませんが、場合によっては役立つかもしれません。

+5

残念ながら、タブとキャリッジリターンは 'ctype_print()'をFALSEにします。 – dotancohen

関連する問題