首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 遞歸掃描目錄批量移除 UTF-8 BOM 頭的腳本

     編輯:PHP 綜合知識

問題背景

UTF-8 BOM (EF BB BF) 會導致 PHP 輸出異常、Session 啟動失敗、XML 解析錯誤等。需批量掃描專案目錄移除。

完整腳本

<?php
header("Content-Type: text/html; charset=utf-8");
$auto = 1; // 1=自動刪除,0=僅檢測
checkdir("D:\\wamp\\www\\sales"); // 修改為你的專案路徑

function checkdir($basedir) {
    if ($dh = opendir($basedir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != '.' && $file != '..') {
                $full = $basedir . "/" . $file;
                if (!is_dir($full)) {
                    echo "檔案: $full " . checkBOM($full) . " <br>";
                } else {
                    checkdir($full);
                }
            }
        }
        closedir($dh);
    }
}

function checkBOM($filename) {
    global $auto;
    $contents = file_get_contents($filename);
    if (strlen($contents) < 3) return "檔案過小";
    
    $bom = substr($contents, 0, 3);
    if ($bom === "\xEF\xBB\xBF") {
        if ($auto == 1) {
            $rest = substr($contents, 3);
            rewrite($filename, $rest);
            return "<font color=red>發現 BOM 並已自動刪除</font>";
        }
        return "<font color=red>發現 BOM</font>";
    }
    return "無 BOM";
}

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

使用說明

  1. 將 checkdir() 參數改為你的專案根目錄
  2. $auto = 1 直接刪除 BOM;設為 0 僅報告不修改
  3. 瀏覽器執行腳本,查看輸出結果

原理說明

  • UTF-8 BOM 為 EF BB BF 三個位元組
  • 讀取檔案前 3 位元組比對
  • 刪除時保留第 4 位元組以後內容,重寫檔案
  • flock(LOCK_EX) 防併發損壞

預防建議

  • 編輯器設定「UTF-8 無 BOM」(Notepad++、VS Code、PhpStorm 預設無 BOM)
  • Git 配置 core.autocrlf=input 並拒絕 BOM 提交
  • CI/CD 流程加入 BOM 檢測步驟
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved