Remplacer des caracteres dans des noms de fichiers pour améliorer la compatibilité.

Soyez le premier à donner votre avis sur cette source.

Vue 4 170 fois - Téléchargée 126 fois

Description

Remplacez les caractères de votre choix dans les noms de fichiers, d'un répertoire et sous répertoire.
Par exemple certains logiciels ne comprennent pas d'un espace puisse faire partie d'un nom de fichier.
Vous pourrez par exemple remplacer tous les espaces des fichiers par des points.
Vous sélectionnez un répertoire, un type d'extension de fichier, les caractères que vous voulez remplacer, et les caractères qui devront être remplacés.
Le script modifiera alors tout les noms de fichiers se trouvant dans le répertoire et ses sous-répertoire.

Source / Exemple :


<?
/*--------------------------------------------*/
// Extention des fichiers a qui ont doit remplacer des caractères.
// Si vous souhaitez remplacer des caractère sur toutes les sortes de fichiers utiliser ceci :
// $GLOBALS['ext'] = 'all';
// Les minuscules sont importantes
$ext = '.mp3';

// Caractère(s) qui doivent être remplacés par $carac_new.
$carac_old = ' ';

// Caractère(s) qui remplacera carac_old.
$carac_new = '.';     
    
// Répertoire dans lequel on doit effectuer les modifications (Attention, cela affectera ausi les sous répertoires).
$rep = 'd:/test/';            
/*--------------------------------------------*/

function delPoint($chemin)
{
	$dossier = opendir($chemin);
	while ($fichier = readdir($dossier)) // On lit tout les fichiers/dossiers du répertoire.
	{
		if ($fichier != "." && $fichier != "..") // Si le nom du fichier ne correspond pas au répertoire actuel ni au repertoire parent.
		{
			// On remplace les $GLOBALS['carac_old'] du fichier par des $GLOBALS['carac_new'].
			$fichierPoint = ereg_replace($GLOBALS['carac_old'],$GLOBALS['carac_new'],$fichier);
			
			// var avec le chemin complet du fichier.
			$nomComplet = $chemin."/".$fichier;
			
			// var avec le chemin complet du fichier a qui ont a mis des $GLOBALS['carac_new'].
			$nomCompletPoint = $chemin."/".$fichierPoint;
			
			if (ereg($GLOBALS['carac_old'],$fichier) && !is_dir($nomComplet) && $GLOBALS['ext'] == 'all') // Si il y as $GLOGALS['carac_old'] dans le fichier, que ce ne soit pas un répertoire et qu'on puisse modifier n'importe quel type de fichiers.
			{
				// On renome le fichier avec ses nouveaux caractères.
				rename($nomComplet, $nomCompletPoint);
				
				// On affiche tout le fichier concerné par ce changement
				echo '<font color=red>'.$fichier.'</font> renommé en <font color=blue>'.$fichierPoint.'</font><br>';
			}
			elseif (ereg($GLOBALS['carac_old'],$fichier) && !is_dir($nomComplet) && substr($fichier,strrpos($fichier,".")) == $GLOBALS['ext']) // Sinon, si il y as $GLOBALS['carac_old'] dans le fichier, que ce ne soit pas un répertoire et si le nom du fichier contient l'extention $GLOBALS['ext'].
			{
				// On renome le fichier avec ses nouveaux caractères.
				rename($nomComplet, $nomCompletPoint);
				
				// On affiche tout les fichiers concerné par ce changement
				echo '<font color=red>'.$fichier.'</font> renommé en <font color=blue>'.$fichierPoint.'</font><br>';
			}
			elseif (is_dir($nomComplet)) // Sinon, si le fichier est un dossier
			{
				// On appel la fonction delPoint avec comme parametre le nom de se dossier
				delPoint($nomComplet);
			}
		}
	  
	}
	closedir($dossier);
}

delPoint($rep);
?>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
"Un str_replace requiert plus de mémoire qu'un ereg_replace (alors pense-y"

Tu es sûr ? en tout cas pour ce qui est du CPU ereg_replace en bouffe beaucoup plus ;-)

a ++
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
Très bien c'est récursif, par contre voici ce que j'ai vu sur php.net (car je n'avais jamais vu $GLOBALS)

<?php
$a = 1;
$b = 2;
function somme() {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
somme();
echo $b;
?>

Donc on ne met pas $GLOBALS hors de la fonction...
Ensuite, ta création des variables suivantes : $fichierPoint, $nomComplet, $nomCompletPoint pourrait être défini APRES ton premier if... sinon ces variables sont définies pour rien.

Ensuite, tu vérifie l'option de modifier que CERTAINS fichiers ayant une telle extension. Alors attention, si j'ai mes fichiers que je veux modifier ont l'extension .all ca ne marchera pas correctement. Ensuite, un autre problème, c'est que ton ereg ne vérifie pas si c'est l'extension...
Si tu chercher l'extension mp3 et que mon fichier s'appelle : somethingmp3.txt ca va le prendre en compte !
Un str_replace requiert plus de mémoire qu'un ereg_replace (alors pense-y)
Tu devrais faire aussi une option pour changer pas seulement un caractère à la fois.

6/10

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.