PHP source code to rename all the files of a folder

Besides having to rename variables and links to avoid display problems, resulting from the character encoding, it is also necessary to rename filenames.
And why do it manually, file by file, whereas PHP can make it so easily?

<?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);
?>

 

Last update : Sunday, march, 24th 2013 Design by Minh-Dung DO