par
baddev » 06 oct. 2011, 13:49
Bonjour
Tout d'abord, un grand merci a vous tous. Votre aide m'a ete d'un grand secours.
Apres une fausse joie, je crois maintenant avoir un script qui fonctionne. J'ai fait un mix de vos propositions, ca donne ca :
<?php
/*
/ Script normalisant les noms de fichiers d'un repertoire donne
/ Renomme les doublons
*/
// Repertoire par defaut
$dirname = "";
// Extension par defaut (au cas ou le fichier n'en ai pas)
$default_ext = "";
$tab_file = array();
$list_cle = array();
$bytestotal = 0;
$nbfiles = 0;
$n = 0;
function filter($in) {
$search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@');
$replace = array ('e','a','i','u','o','c','_','');
return preg_replace($search, $replace, $in);
}
$dir_iterator = new RecursiveDirectoryIterator($dirname);
foreach (new RecursiveIteratorIterator($dir_iterator) as $current_file)
{
if($current_file != '.' && $current_file != '..' && !is_dir($dirname.$current_file))
{
$filesize = $current_file->getSize();
$bytestotal += $filesize;
$nbfiles++;
$path_parts = pathinfo($current_file);
$dirname_cf = $path_parts['dirname'];
$filename_cf = $path_parts['filename'];
(array_key_exists('extension', $path_parts)) ? $extension_cf = $path_parts['extension'] : $extension_cf = $default_ext;
if(strtolower(filter($filename_cf)) != "") $pot_rename = $dirname_cf . "/" . strtolower(filter($filename_cf)) . "." . $extension_cf;
if(file_exists($pot_rename))
{
echo "rename impossible, the file already exists : " . $current_file . " => " . $pot_rename . "\n";
rename($current_file, $dirname_cf . "/" . strtolower(filter($filename_cf)) . "_" . $n . "." . $extension_cf);
$n++;
} else
{
if($current_file != ".")
{
rename($current_file, $pot_rename);
echo "rename OK : " . $current_file . " => " . $pot_rename . "\n";
} else
{
echo "A problem occured with this file : " . $current_file . "\nYou should verify your files, the script's exiting..\n\n";
exit(1);
}
}
}
}
// End of script
$bytestotal = number_format($bytestotal);
echo "\n\nTotal: $nbfiles files, $bytestotal bytes \n\n";
?>
C'est loin d'etre parfait mais ca fonctionne : ca renomme tous les fichiers (dans tous les cas de figures.. je crois

) et renomme aussi les doublons (independamment des extensions).
Par contre, je n'ai pas compris comment instancier Normalizer et j'ai aucune idee de ce que veut dire : '/\p{Mn}+/u'.. Si vous avex des idees pour l'ameliorer, n'hesitez pas !
Encore merci !

Bonjour
Tout d'abord, un grand merci a vous tous. Votre aide m'a ete d'un grand secours. :D
Apres une fausse joie, je crois maintenant avoir un script qui fonctionne. J'ai fait un mix de vos propositions, ca donne ca :
[php]<?php
/*
/ Script normalisant les noms de fichiers d'un repertoire donne
/ Renomme les doublons
*/
// Repertoire par defaut
$dirname = "";
// Extension par defaut (au cas ou le fichier n'en ai pas)
$default_ext = "";
$tab_file = array();
$list_cle = array();
$bytestotal = 0;
$nbfiles = 0;
$n = 0;
function filter($in) {
$search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@');
$replace = array ('e','a','i','u','o','c','_','');
return preg_replace($search, $replace, $in);
}
$dir_iterator = new RecursiveDirectoryIterator($dirname);
foreach (new RecursiveIteratorIterator($dir_iterator) as $current_file)
{
if($current_file != '.' && $current_file != '..' && !is_dir($dirname.$current_file))
{
$filesize = $current_file->getSize();
$bytestotal += $filesize;
$nbfiles++;
$path_parts = pathinfo($current_file);
$dirname_cf = $path_parts['dirname'];
$filename_cf = $path_parts['filename'];
(array_key_exists('extension', $path_parts)) ? $extension_cf = $path_parts['extension'] : $extension_cf = $default_ext;
if(strtolower(filter($filename_cf)) != "") $pot_rename = $dirname_cf . "/" . strtolower(filter($filename_cf)) . "." . $extension_cf;
if(file_exists($pot_rename))
{
echo "rename impossible, the file already exists : " . $current_file . " => " . $pot_rename . "\n";
rename($current_file, $dirname_cf . "/" . strtolower(filter($filename_cf)) . "_" . $n . "." . $extension_cf);
$n++;
} else
{
if($current_file != ".")
{
rename($current_file, $pot_rename);
echo "rename OK : " . $current_file . " => " . $pot_rename . "\n";
} else
{
echo "A problem occured with this file : " . $current_file . "\nYou should verify your files, the script's exiting..\n\n";
exit(1);
}
}
}
}
// End of script
$bytestotal = number_format($bytestotal);
echo "\n\nTotal: $nbfiles files, $bytestotal bytes \n\n";
?>[/php]
C'est loin d'etre parfait mais ca fonctionne : ca renomme tous les fichiers (dans tous les cas de figures.. je crois :roll: ) et renomme aussi les doublons (independamment des extensions).
Par contre, je n'ai pas compris comment instancier Normalizer et j'ai aucune idee de ce que veut dire : '/\p{Mn}+/u'.. Si vous avex des idees pour l'ameliorer, n'hesitez pas ! :)
Encore merci ! ;)