快速測試UTF8編碼的文件是不是加了BOM,不限PHP

此文件用於快速測試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);
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章