• 技术文章 >后端开发 >php教程

    PHP中bom头引发的超级血案-head中的静态文件生成到body里面了

    巴扎黑巴扎黑2016-12-28 17:33:39原创538
    【问题现象】:php中生成html文件时head中的静态文件生成到body里面了,检查了一下发现有很多的uft8的php文件,其中有那么几个文件存在有BOM头的文件。

    【原因分析】:编码格式错误,使用了utf-8的bom头。

    【解决方案】:在根目录下新建一个bom.php文件,并拷贝以下代码进去,重启服务即可

    <?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.</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中bom头引发的超级血案-head中的静态文件生成到body里面了的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:bom,PHP,head
    上一篇:PHP用switch语句设计网站主页 下一篇:PHP实现过滤留言信息中的敏感词
    线上培训班

    相关文章推荐

    • 你知道这个PHP命令行选项解析库(pflag)吗?• 带你看懂PHP中的class定义类与成员属性方法• PHP中如何才能将时间日期格式化?怎么计算时间差?• 最详细的教你PHP时间戳与日期时间的转换• 一定搞得懂PHP中如何添加图片水印

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网