檢測根目錄帶bom頭資訊的檔案

小虎哥-技術部落格發表於2018-10-18

新建bom.php檔案,複製以下程式碼儲存。然後把檔案放到根目錄下,在瀏覽器訪問檢測是否有帶bom頭資訊的檔案存在:http://你的域名/bom.php?auto=0

如果想清除的話,請訪問:http://你的域名/bom.php?auto=1

<?php
//remove the utf-8 boms
//by magicbug at gmail dot com
if (isset($_GET['dir'])){ //config the basedir
    $basedir=$_GET['dir'];
}else{
    $basedir = '.';
}
$autoval = !empty($_GET['auto']) ? $_GET['auto'] : 0;
$auto = $autoval;

$num = 0;

$str = '';
checkdir($basedir, $str, $num);
if (0 < $num) {
    $str = '檢測有'.$num.'個檔案帶有BOM頭部資訊 <br>'.$str;
}
echo $str;
exit;

function checkdir($basedir, &$str = '', &$num = 0){
    if ($dh = opendir($basedir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != '.' && $file != '..'){
                if (!is_dir($basedir."/".$file)) {
                    $return = checkBOM("$basedir/$file", $num);
                    if (0 == $return['code']) {
                        $str .= "filename: $basedir/$file ";
                        $str .= $return['msg']." <br>";
                    }
                }else{
                    $dirname = $basedir."/".$file;
                    checkdir($dirname, $str, $num);
                }
            }
        }
        closedir($dh);
    }
}

function checkBOM ($filename, &$num = 0) {
    global $auto;
    $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) {
        $num++;
        if ($auto == 1) {
            $rest = substr($contents, 3);
            rewrite ($filename, $rest);
            return [
                'code'  => 0,
                'msg'   => "<font color=red>BOM found, automatically removed.</font>",
            ];
        } else {
            return [
                'code'  => 0,
                'msg'   => "<font color=red>BOM found.</font>",
            ];
        }
    } else {
        return [
            'code'  => 1,
            'msg'   => "BOM Not Found.",
        ];
    }
}

function rewrite ($filename, $data) {
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}
?>

 

相關文章