head的内容被解析到了body里解决办法

  • 2019 年 10 月 5 日
  • 筆記

在搭建完服务器环境部署项目时出现一个奇葩问题,发现线上项目手机端head里的内容被解析到了body里,并且在body后面会出现了一片空白,一开始认为是实体空格的原因,经过一番排查未果,接着各种搜索引擎寻找答案,最终确认是文件包含bom头所致。

如果你也遇到类似的问题,可直接将以下代码保存后,放置项目的根目录,直接运行即可。

<?php  $basedir = str_replace('/clearBOM.php','',str_replace('','/',dirname(__FILE__)));  $auto = 1;  checkdir($basedir);  function checkdir($basedir){      if ($dh = opendir($basedir)) {          while (($file = readdir($dh)) !== false) {              if ($file != '.' && $file != '..'){                  if (!is_dir($basedir.'/'.$file)) {                      $filename = $basedir.'/'.$file;                      echo 'filename:'.$basedir.'/'.$file.checkBOM($filename).'<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="#FF0000">BOM found,automatically removed.</font>';          } else {              return '<font color="#FF0000">BOM found.</font>';          }      } else {          return '<font color="#009900">BOM Not Found.</font>';      }  }    function rewrite ($filename, $data) {      $filenum = fopen($filename, 'w');      flock($filenum, LOCK_EX);      fwrite($filenum, $data);      fclose($filenum);  }  ?>