PHP批量检测并去除文件BOM头代码实例
关于文件头信息中的BOM头对程序执行结果产生的影响及如何去除这些文件的BOM信息
当你访问这个PHP脚本时,它会遍历指定的目录及其所有子目录中的文件,并检查每个文件的BOM。如果发现某个文件含有BOM,它将自动移除并显示红色字体提示。以下是这段PHP代码:
```php
// 设置文件目录,可通过GET参数传入,否则默认为当前目录
if (isset($_GET['dir'])) {
$basedir = $_GET['dir'];
} else {
$basedir = '.';
}
$auto = 1; // 设置自动移除BOM标志
checkdir($basedir); // 开始检查目录
function checkdir($basedir) {
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..') { // 排除当前目录和上级目录
if (!is_dir($basedir . "/" . $file)) { // 如果是文件则检查BOM并显示结果
echo "filename: $basedir/$file " . checkBOM("$basedir/$file") . "
";
} else { // 如果是目录则递归处理
$dirname = $basedir . "/" . $file;
checkdir($dirname);
}
}
}
closedir($dh);
}
}
function checkBOM($filename) {
global $auto; // 获取全局变量$auto用于判断是否自动移除BOM
$contents = file_get_contents($filename); // 读取文件内容
$charset = unpack('C', $contents)[1]; // 获取文件开头的三个字节,判断是否包含BOM
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { // 如果包含BOM则进行处理
if ($auto == 1) { // 如果设置了自动移除则移除BOM并返回提示信息
$rest = substr($contents, 3); // 截取除去BOM的部分内容