Code source php pour renommer tous les fichiers d'un dossier

Outre le fait de devoir renommer ses variables et ses liens, afin d'éviter tout problème d'affichage, résultant de l'encodage des caractères, il est aussi nécessaire de renommer ses noms de fichiers.
Et pourquoi le faire manuellement, fichier par fichier, lorsque php nous facilite autant la vie ?

<?php
//header('Content-Type: text/html; charset=utf-8');

// Renomme $nomFichier de $dossier dont le nom est encodé en 'ISO-8859-1' (par défaut)
// charset utilisé : celui du système de fichiers sous Windows, pas 'utf-8'
function renommeFichier($dossier$nomFichier$charset='ISO-8859-1') {
  echo 
" | AVANT --> "$nomFichier "<br />\n";
  
// transforme les caractères spéciaux en entités html
  
$str htmlentities($nomFichierENT_NOQUOTES$charset);
  
//echo " | Conversion --> " . $str . "<br />\n";
  // On remplace les accents :
  
$str preg_replace('#&([A-Za-z])(acute|cedil|circ|grave|ring|tilde|uml);#''\1'$str);
  
// On remplace les ligatures du style '&oelig;'
  
$str preg_replace('#&([A-Za-z]{2})(lig);#''\1'$str);
  
// On supprime les autres entités commençant par &
  
$str preg_replace('#&[^;]+;#'''$str);
  
// On supprime les parenthèses et les crochets
  
$str preg_replace('#[\[\]\(\)]#'''$str);
  
// On remplace les espaces et les soulignés _ (underscores) par des tirets
  
$str preg_replace('#[ _]#''-'$str);
  if (
$nomFichier != $str) {// Si le nouveau nom est différent de l'ancien
    
if (file_exists($dossier $str)) // Si le nouveau nom existe déjà,
      
echo " !!! On a trouv&eacute; un DOUBLE --> <strong>" $str "</strong><br />\n";
      for ( 
$i 0file_exists($dossier $str); $i++ ) { // on renomme la variable $str à l'avance
        
$dernierPoint strrpos($str,'.'); // Position du dernier point
        
$str substr($str,0,$dernierPoint)."-".substr($str,$dernierPoint);
      }
    
rename($dossier $nomFichier $dossier $str); // On renomme $nomFichier en $str dans $dossier
    
echo " | APR&Egrave;S --> <strong>" $str "</strong><br />\n";
  }
// Fin de la déclaration de la fonction renommeFichier()

// Parcourt le dossier $dossier à la recherche de fichiers à renommer 
function parcourir($dossier) {
  if (!
preg_match('#/$#'$dossier)) { // Si le nom du dossier ne se termine pas par un /
    
$dossier .= '/'// on en ajoute un
  
}
  
// echo "On vient d'ajouter un / à la fin du chemin<br />\n";
  
if (is_dir($dossier)) // Si c'est bien un dossier existant
  
if ($dh = @opendir($dossier)) { // Si on peut ouvrir le dossier donné en argument
    
if ( ($fichier readdir($dh)) === FALSE // S'il ne contient aucun fichier
      
echo "Y a rien l&agrave; !"// on l'indique
    
else echo "Dans le dossier ".$dossier."<br />\n";
    
// Sinon on parcourt le dossier tant qu'on trouve quelque chose
    
while (($fichier readdir($dh)) !== FALSE) {
      
//echo "On a trouvé ça ". utf8_decode($fichier)."<br />\n";
      
if ( ($fichier == '.') || ($fichier == '..') ) { // On évite le dossier parent et lui-même
        
continue; // On ne fait rien
      
} elseif (is_dir($dossier $fichier)) { // Si on a trouvé un dossier contenu dans $dossier
        
parcourir($dossier $fichier); // Récursivité
      
} else { // Sinon on renomme
        
echo "On a trouv&eacute; ce fichier :<br />\n";
        
renommeFichier($dossier$fichier);
      }
    }
    @
closedir($dh); // On ferme le dossier après l'avoir ouvert
    
echo "On vient de fermer le dossier.";
  } else echo 
"Impossible d'ouvrir le dossier ".$dossier." !!!\n";
  else echo 
"Ce dossier n'existe pas !\n";
// Fin de la déclaration de la fonction parcourir()

// Si un dossier est fourni par méthode $_GET, on le prend, sinon c'est un dossier par défaut
$rep = !empty($_GET["dossier"]) ? $_GET["dossier"] : "dos_test";
// Appel : Il faut indiquer le chemin complet du dossier test
parcourir($_SERVER['DOCUMENT_ROOT'].$rep);
?>

 

Dernière mise à jour : dimanche 24 mars 2013 Design par Minh-Dung DO