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

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

发布时间:2022-01-22 19:21:31 所属栏目:PHP教程 来源:互联网
导读:因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除,如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录下,然后浏览器访问即可. 例子:将以上代码保存为后缀为php的
  因为文件头信息输出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);
  }
 

(编辑:源码门户网)

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

    热点阅读