class RenameFilesDir
{
/** @var string $dir : Nom absolue du dossier AVEC un lien symbolique './dossier' ou '../dossier' */
private $dir;
/** @var string $prefix : Prefix des fichiers renommer */
private $prefix;
/** @param string $ini_extensions : sélection extension particulière, par défaut toutes les extensions */
private $ini_extensions;
/** @param int $ini_counter : simple compteur pour la partie suffixe */
private $ini_counter;
/**
* Méthode magique constructeur
*/
public function __construct($dirname, $prefix='newname', $ini_extensions='', $ini_counter=0)
{
$this->dir .= (preg_match('/\/$/', $dirname)) ? $dirname : $dirname.'/';
$this->prefix = strval($prefix);
$this->ini_extensions = strval($ini_extensions);
$this->ini_counter = intval($ini_counter);
if(!preg_match('/^\.{1,2}/', $this->dir))
throw new Exception('Indiquer le dossier avec un lien symbolique : \'./dossier\' ou \'../dossier\'');
if(!file_exists($this->dir))
throw new Exception('Le dossier n\'a pas été trouvé');
$this->rename();
}
/**
* Renommage des fichiers
*/
private function rename()
{
$it = new FilesystemIterator($this->dir);
foreach ($it as $fileinfo) {
$current_file = $it->getFilename();
if($it->isFile() && !$this->ini_extensions)
preg_match('/(.*)\.(.*)$/i', $current_file, $match);
elseif($it->isFile())
preg_match('/(.*)\.('.trim( $this->ini_extensions, '.' ).')$/i', $current_file, $match);
if(isset($match) && sizeof($match)>1) {
$old_file = $this->dir . $match[0];
$new_file = $this->dir. $this->prefix. (($this->ini_counter < 10) ? '0'.$this->ini_counter : $this->ini_counter). '.' .$match[2];
rename($old_file, $new_file);
$this->ini_counter++;
}
}
}
}