頭から何バイトか読み出して、
- 先頭が0xEFだったら BOMあり
- CR+LFがあったら CR+LF
- #や<で始まってなければ ソースじゃない
と看做して引っ掛かったファイルの一覧を作成する
#!/usr/bin/php -q <? array_shift($argv); while( $f=array_shift($argv) ){ if($fp = fopen($f,"r")){ $str = fread($fp,20); if( preg_match('/^\xef/', $str) ) echo("$f: BOMあり\n"); if( preg_match('/\x0d\x0a/', $str) ) echo("$f: CRLF\n"); $flag_p = preg_match('/^#/', $str); $flag_h = preg_match('/^</', $str); if( (!$flag_p) && (!$flag_h) ) echo("$f: ソースじゃない\n"); fclose($fp); } }
find -name "*.php" | xargs ./bom.php