Et BOM le script

Il m’est arrivé à plusieurs reprises de devoir rechercher à plusieurs reprises un caractère BOM (marque d’ordre des octets : cf: wikipedia) au sein de sites web basés sur des logiciels libres tels que Joomla, WordPress..

La recherche de ce caractère dans l’ensemble des fichiers est bien entendu fastidieuse.

C’est pourquoi j’ai crée ce script qui recherche la présence de ces caractères au sein de tous les fichiers « .php », « .html » et « .ini » contenus dans la WEB_ROOT.

$extensions_allowed = array();
$extensions_allowed [] = 'php';
$extensions_allowed [] = 'html';
$extensions_allowed [] = 'ini';

function listeFichiers($dir){
  global $extensions_allowed;
  if ($handle = opendir($dir)) {
    /* Ceci est la façon correcte de traverser un dossier. */
    while (false !== ($file = readdir($handle))) {
      if (($file <>'.') && ($file<>'..')) {
        if (is_file($dir.'/'.$file)){
          $extension = pathinfo($dir.'/'.$file, PATHINFO_EXTENSION);
          if (in_array($extension,$extensions_allowed)){
            $fileHandle = fopen($dir.'/'.$file, "r");
            $intro = fread($fileHandle, 3);
            fclose($fileHandle);
            if ($intro == "\xEF\xBB\xBF"){
              echo "$dir/$file\n";
              flush();
            }
          }
      } else {
        if (is_dir($dir.'/'.$file)){
          listeFichiers($dir.'/'.$file);
        }
      }
    }
   }
   closedir($handle);
  }
}

header("Content-type: text/plain\n\n");

set_time_limit(3600);

$path = $_SERVER['DOCUMENT_ROOT'];

if (substr($path,-1)=='/'){
  $path =  substr($path,0,-1);
}

listeFichiers($path);
?>