此文件用於快速測試UTF8編碼的文件是不是加了BOM,並可自動移除
增加了檢測子文件夾和排除不要檢測的文件夾,轉載的很好用。
<?php /** * 此文件用於快速測試UTF8編碼的文件是不是加了BOM,並可自動移除 * 增加了檢測子文件夾和排除不要檢測的文件夾 * * @author yangzy */ $bom = new bom(); $bom->run(); class bom { public $basedir = ".";//修改此行爲需要檢測的目錄,點表示當前目錄 public $auto = '1';//是否自動移除發現的BOM信息。1爲是,0爲否。 public $file_arr = array('.svn','p_w_picpaths','data','shop','temp');//不需要檢測文件夾 public function __construct() { } /** * 運行程序 */ public function run($basedir = '') { $basedir || $basedir = $this->basedir; if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) { echo $basedir."/".$file.':'.$this->checkBOM($basedir."/$file")." <br>"; } elseif ($file!='.' && !in_array($file, $this->file_arr) && $file!='..' && is_dir($basedir."/".$file)) { $this->run($basedir."/".$file); } } closedir($dh); } } /** * 檢測bom文件 */ public function checkBOM($filename) { $contents=file_get_contents($filename); $charset[1]=substr($contents, 0, 1); $charset[2]=substr($contents, 1, 1); $charset[3]=substr($contents, 2, 1); if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) { if ($this->auto == 1) { $rest=substr($contents, 3); $this->rewrite ($filename, $rest); return ("<font color=red>BOM found, automatically removed.</font>"); } else { return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); } /** * 重新生成文件 */ public function rewrite($filename, $data) { $filenum=fopen($filename,"w"); flock($filenum,LOCK_EX); fwrite($filenum,$data); fclose($filenum); } }