案例:
<?php class KillBom { //定義擴展名 public static $m_ext = ['txt','php','js','css']; /** * 傳入一個任意文件,自動區分定義的擴展名,然后過濾 * @param string $file * @return boolean */ public static function killBomByFile($file) { //獲取一個文件的擴展名 $ext = pathinfo($file,PATHINFO_EXTENSION); if (in_array($ext, self::$m_ext) and is_file($file))//允許被替換,而且是個文件(不是目錄) { $content = file_get_contents($file);//取出文件詳情 if (substr($content, 0, 3) == chr(0xEF) . chr(0xBB) . chr(0xBF))//ef.bb.bf檢查bom頭 { return file_put_contents($file,substr($content, 3)) > 0;//清除bom並寫入文件 } } return false; } /** * 遍歷獲取子目錄 及文件夾 * @param string $dir * @return string[] */ public static function getFileListByDir($dir) { //打開文件 $dir_handle = opendir($dir); //存儲結果 $result = []; while ($file = readdir($dir_handle))//不斷讀取目錄 { if ($file != '.' and != '..')//不是本級目錄,上級目錄 //組裝成絕對路徑 DIRECTORY_SEPARATOR目錄分隔符,windows為\,linux為/ $file = $dir . DIRECTORY_SEPARATOR . $file; if (is_dir($file))// 是目錄的話 { //遞歸合並結果 $result = array_merge($result , self::getFileListByDir($file)); } else { $result[] = $file;// 記錄結果 } } return $result;//返回結果 } /** * 清空目錄下所有Bom頭文件 * @param string $dir */ public function killDir($dir) { //先找到所有文件 $files = self::getFileListByDir($dir); foreach ($files as $file) { if (!self::killBomByFile($file))//干掉 { echo $file . '-> no bom! <br>'.chr(13);//結果 } else { echo $file . '-> bom is killed! <br>'.chr(13);//結果 } } } } //調用 killBom::killDir('你的目錄');
以上就是這次的全部內容!