当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-06-20 10:01:55 浏览: 评论:0 

因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除,如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录下,然后浏览器访问即可.

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

  1. <?php 
  2. if (isset($_GET['dir'])) { //设置文件目录   
  3.     $basedir = $_GET['dir']; 
  4. else { 
  5.     $basedir = '.'
  6.  
  7. $auto = 1; 
  8. checkdir($basedir); 
  9.  
  10. function checkdir($basedir
  11.     if ($dh = opendir($basedir)) { 
  12.         while (($file = readdir($dh)) !== false) { 
  13.             if ($file != '.' && $file != '..') { 
  14.                 if (!is_dir($basedir . "/" . $file)) { 
  15.                     echo "filename: $basedir/$file " . checkBOM("$basedir/$file") . " <br>"
  16.                 } else { 
  17.                     $dirname = $basedir . "/" . $file
  18.                     checkdir($dirname); 
  19.                 } 
  20.             } 
  21.         } 
  22.         closedir($dh); 
  23.     } 
  24. function checkBOM($filename
  25.     global $auto
  26.     $contents   = file_get_contents($filename); 
  27.     $charset[1] = substr($contents, 0, 1); 
  28.     $charset[2] = substr($contents, 1, 1); 
  29.     $charset[3] = substr($contents, 2, 1); 
  30.     if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { 
  31.         if ($auto == 1) { 
  32.             $rest = substr($contents, 3); 
  33.             rewrite($filename$rest); 
  34.             return ("<font color="red">BOM found, automatically removed._<a href="http://www.phpfensi.com">http://www.phpfensi.com</a></font>"); 
  35.         } else { 
  36.             return ("<font color="red">BOM found.</font>"); 
  37.         } 
  38.     } else 
  39.         return ("BOM Not Found."); 
  40.  
  41. function rewrite($filename$data
  42.     $filenum = fopen($filename"w"); 
  43.     flock($filenum, LOCK_EX); 
  44.     fwrite($filenum$data); 
  45.     fclose($filenum); 
  46. ?> 

例子二,代码如下:

  1. <?php 
  2. header('content-Type: text/html; charset=utf-8'); 
  3. $auto=1;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/ 
  4. $basedir='.'
  5. $loop=true;//www.phpfensi.com echo '当前查找的目录为:'.$basedir.'当前的设置是:'; 
  6. echo '(1)',$loop?'检查当前目录以及当前目录的子目录':'只针对当前目录进行检测'
  7. echo '(2)',$auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除BOM操作<br />'
  8.  
  9. checkdir($basedir,$loop); 
  10. function checkdir($basedir='',$loop=true){ 
  11.  $basedir=emptyempty($basedir)?'.':$basedir
  12.  if($dh=opendir($basedir)){ 
  13.   while (($file=readdir($dh))!==false){ 
  14.    if($file!='.'&&$file!='..'){ 
  15.     if(!is_dir($basedir.'/'.$file)){ 
  16.      echo '文件: '.$basedir.'/'.$file .checkBOM($basedir.'/'.$file).' <br>'
  17.     }else
  18.      if(!$loopcontinue
  19.      $dirname=$basedir.'/'.$file
  20.      checkdir($dirname); 
  21.     } 
  22.    } 
  23.   } 
  24.   closedir($dh); 
  25.  } 
  26. function checkBOM($filename){ 
  27.  global $auto
  28.  $contents=file_get_contents($filename); 
  29.  $charset[1]=substr($contents,0,1); 
  30.  $charset[2]=substr($contents,1,1); 
  31.  $charset[3]=substr($contents,2,1); 
  32.  if(ord($charset[1])==239&&ord($charset[2])==187&&ord($charset[3])==191){ 
  33.   if($auto==1){ 
  34.    $rest=substr($contents,3); 
  35.    rewrite($filename,$rest); 
  36.    return (' <font color=red>找到BOM并已自动去除</font>'); 
  37.   }else
  38.    return (' <font color=red>找到BOM</font>'); 
  39.   } 
  40.  }else
  41.   return (' 没有找到BOM'); 
  42.  } 
  43. function rewrite($filename,$data){ 
  44.  $filenum=fopen($filename,'w'); 
  45.  flock($filenum,LOCK_EX); 
  46.  fwrite($filenum,$data); 
  47.  fclose($filenum); 

Tags: PHP批量检测 去除文件BOM信息

分享到: