加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP批量检测并删除文件BOM头信息代码

发布时间:2023-06-08 14:02:22 所属栏目:PHP教程 来源:
导读:因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除,如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录下,然后浏览器访问即
因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除,如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录下,然后浏览器访问即可.

例子:将以上代码保存为后缀为php的文件放到需要去除bom的文件目录里面,然后运行该php文件,将会对该目录以及该目录所有的子目录下的文件进行bom检查并去除bom,代码如下:

<?php 
if (isset($_GET['dir'])) { //设置文件目录   
    $basedir = $_GET['dir']; 
} else { 
    $basedir = '.'; 

 
$auto = 1; 
checkdir($basedir); 
 
function checkdir($basedir) 

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

function checkBOM($filename) 

    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) { 
        if ($auto == 1) { 
            $rest = substr($contents, 3); 
            rewrite($filename, $rest); 
            return ("<font color="red">BOM found, automatically removed._<a href="http://www.Cuoxin.com">http://www.Cuoxin.com</a></font>"); 
        } else { 
            return ("<font color="red">BOM found.</font>"); 
        } 
    } else 
        return ("BOM Not Found."); 

 
function rewrite($filename, $data) 

    $filenum = fopen($filename, "w"); 
    flock($filenum, LOCK_EX); 
    fwrite($filenum, $data); 
    fclose($filenum); 

?> 
例子二,代码如下:

<?php 
header('content-Type: text/html; charset=utf-8'); 
$auto=1;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/ 
$basedir='.'; 
$loop=true;//www.Cuoxin.com echo '当前查找的目录为:'.$basedir.'当前的设置是:'; 
echo '(1)',$loop?'检查当前目录以及当前目录的子目录':'只针对当前目录进行检测'; 
echo '(2)',$auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除BOM操作<br />'; 
 
checkdir($basedir,$loop); 
function checkdir($basedir='',$loop=true){ 
 $basedir=emptyempty($basedir)?'.':$basedir; 
 if($dh=opendir($basedir)){ 
  while (($file=readdir($dh))!==false){ 
   if($file!='.'&&$file!='..'){ 
    if(!is_dir($basedir.'/'.$file)){ 
     echo '文件: '.$basedir.'/'.$file .checkBOM($basedir.'/'.$file).' <br>'; 
    }else{ 
     if(!$loop) continue; 
     $dirname=$basedir.'/'.$file; 
     checkdir($dirname); 
    } 
   } 
  } 
  closedir($dh); 
 } 

function checkBOM($filename){ 
 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){ 
  if($auto==1){ 
   $rest=substr($contents,3); 
   rewrite($filename,$rest); 
   return (' <font color=red>找到BOM并已自动去除</font>'); 
  }else{ 
   return (' <font color=red>找到BOM</font>'); 
  } 
 }else{ 
  return (' 没有找到BOM'); 
 } 

function rewrite($filename,$data){ 
 $filenum=fopen($filename,'w'); 
 flock($filenum,LOCK_EX); 
 fwrite($filenum,$data); 
 fclose($filenum); 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章