批量去除文件的BOM頭


案例:

<?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('你的目錄');

 

 

以上就是這次的全部內容!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM