人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPである変数に入ってるデータが、deflateやbz2で圧縮されたものか、そうでないものか、データ内容だけで判別する方法を教えて下さい。

※具体的な例を書いて頂けると有り難いです。

●質問者: wankodon
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● いわわ
●100ポイント ベストアンサー

ヘッダ部分を比較するといけます

bzip2のヘッダ
先頭10バイトが 文字列BZhと圧縮率、マジックナンバー6バイト(0x314159265359) の場合、bzip2です

gzipのヘッダ
先頭3バイトが0x1F,0x8B,0x08の場合、gzip(deflate)です

#!/usr/bin/php -q
<?
 $buf = fread( STDIN, 10 ) or die("fread");
// print( "$buf\n" );

 // bzip2判定
 if( preg_match( "/BZh(\d)1AY&SY/", $buf, $m ) ){
 print("bzip2 ". $m[1] ."\n");
 }

 // gzip判定
 for($i=0;$i<10;$i++){ $a[$i] = ord(substr($buf,$i,1)); }
 if( $a[0]==0x1F && $a[1]==0x8B && $a[2]==0x08 ){
 print("gzip\n");
 }
?>

プログラムで書くとこんな感じです


wankodonさんのコメント
たいへん遅くなりましたが、回答どうもありがとうございました。 意外と簡単に実装できそうですね。参考にさせて頂きます!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ