dポイントプレゼントキャンペーン実施中!

基本的なことですが、PHPでテキストファイルかバイナリーファイかを判定する方法がわかりません。以下のperlコードをphpで書く方法を教えてください。
if( -T $filename ){
テキストファイルの処理
}else{
バイナリーファイルの処理
}
マニュアル見ましたがよくわかりませんでした。よろしくお願いします。

A 回答 (2件)

がると申します。


んと…そも「テキストファイルってなんですか?」という、かなり厄介な定義の問題になるのですが。
ちなみに。Perlのファイルテスト演算子 -T は、
「ファイルの最初の約1ブロック分のデータを調べて、コントロール文字や最上位ビットが立っている文字が多すぎる(30%より多い)ならバイナリファイル(-Bが真)、そうでなければテキストファイル(-Tが真)と判定する」とありますが(O'REILLY プログラミングPerl より)。
この条件だと「日本語(jis以外のエンコードが入っているファイル)は、高い確率で「バイナリ」になります。

多分、「テキスト or バイナリ」よりも、もう少しきめの細かいチェック&処理振り分けか、或いは逆に「画一的な処理」が必要になるのではないかと思うのですが如何でしょうか?

この回答への補足

Cやjavaなどをcompileしたバイナリファイルのつもりだったのですが........
Perlのファイルテスト演算子 -Tの定義勉強になりました。eucやsjisまでバイナリと判定されるならこの演算子の使用を使うこと自体制限/問題があるようです。

補足日時:2008/07/28 00:53
    • good
    • 0
この回答へのお礼

人間が読解可能なファイルをテキストファイルとしてPHPで処理したくperlの-Tを見つけましたが、ご指摘のとおり問題がありそうです。結局、拡張子で判断することにしました。万全でありませんが当面あきらめます。ありがとうございます。

お礼日時:2008/07/28 07:34

いっそ面倒なのでexecでfileを実行してみては?



<?
print exec("file xxx");
?>

この回答への補足

ありがとうございますが如何なものでしょうか? binやshなど不用意にexecしてよいでしょうか? ascii,jis,uuc,sjis,utfのencodeを判定する方法はないかとも思ったのですが、これだと逆にbase64でcodingされた画像などがテキストファイルと判定されてしまいます。何かよいヒントがあれば教えてください。

補足日時:2008/07/28 09:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!