PHP批量检测并去除文件BOM头代码实例

  如下代码为PHP方式去除当前目录及子目录所有文件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.</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);

  }

  ?>