These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんばんわ♪ 現在は5月18日(土)20時25分。 8時を過ぎてしましました。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2011年11月 来月
1 2 03 4 5
6 7 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2011年11月29日(火)

ファイルの途中に含まれるデータの形式を調べる

ファイルのデータ形式を推測する file というコマンドがありますが、ファイルの途中から始まっている場合には対応していません。(ヘルプを読んだ限りでは)
そこで、ファイルの先頭から1バイトずつずらして file コマンドを何度も呼ぶ事で、ファイルの途中に含まれるデータの形式を何通りか推測するツールを作りました。

exec_file.php:

<?php

$size_limit = 0x200;

if (($argc != 2) || (is_readable($argv[1]) === false)) {
    echo 'Usage: php exec_file.php <target file>'.PHP_EOL;
    exit (1); // failure                                                        
}
$data = file_get_contents($argv[1]);

$len = min($size_limit, strlen($data) - 1); // 1 = very short file (no magic)   
for ($i = 0; $i < $len; $i++) {
    $ret = exec_file_command(substr($data, $i));
    if ($ret === false) {
    echo 'failed to execute file command'.PHP_EOL;
        break;
    }
    if ($ret !== 'data') {
        printf('0x%04x: %s'.PHP_EOL, $i, $ret);
    }
}

exit (0); // success                                                            
function exec_file_command($data) {
    $descspec = array(array('pipe', 'r'), array('pipe', 'w'));
    $process = proc_open('file -b -', $descspec, $pipes);
    if (is_resource($process) === false) {
        return false; // NG                                                     
    }
    fwrite($pipes[0], $data);
    fclose($pipes[0]);
    $ret = stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    return trim($ret);
}
結構、便利。

これで、1 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project