Changer le nom de fichier que contient une variable avant le point

Signaler
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008
-
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008
-
Salut a tous,
J'ai une variable qui contient le nom d'un fichier (par exemple $fichier = nomdefichier.jpg;) et j'aimerais pouvoir faire des modification sur le nom du fichier avant le point et garder seuleument les trois premieres lettres, par exemple renommer en nom1.jpg. Je suppose qu'il y a une fonction pour faire ca mais laquelle et comment fonctionne t-elle ?
Merci d'avance

6 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

http://fr.php.net/manual/fr/function.substr.php

D'une manière générale, la doc de php donne ce genre de réponse ;)
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

Merci
Super pour une partie du problème qui est de tronquer le nom du fichier mais il faudrait que j'isole le .jpg ou .jpeg ou .gif etc... et faudrait peut être une autre fonction dont j'ignore le nom
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Re,

Pour isoler l'extension, une petite expression régulière :
$ext = preg_replace('`.*\.([^\.]*)$`', '$1', $fichier);
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

Merci, est ce qu'une petite explication c'est trop demander ? j'aime bien comprendre ce que je fais ou sinon quelques mots clés que je fasse une petite recherche ...
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Ben...

Pour le fonctionnement de la fonction : http://www.php.net/manual/fr/function.preg-replace.php

Pour l'expression régulière : http://www.php.net/manual/fr/reference.pcre.pattern.syntax.php

Allez... Quelques explications, parce que sinon, j'avoue qu'avec la doc, pour piger l'expression régulière, c'est pas gagné.

` : délimiteur de l'expression régulière proprement dite. Après le deuxième délimiteur (celui de fin, donc) on peut trouver des options de recherche (comme par exemple la sensibilité ou non à la casse).

.* : n'importe quel caractère répété un nombre de fois non défini.

\. : caractère point. Le point étant un caractère spécial pour les regex, il faut l'échapper.

( ) : masque de capture. Ce qui correspond à ce qui y est capturé sera accessible par référence. On en reparle après.

[ ] : définie une classe de caractères. C'est en quelque sorte un filtre : on ne prend que les caractères qui se trouvent dans cette classe. Ou pas : si ^ est utilisé comme premier caractère de la classe, on ne cherche que des caractères qui NE SONT PAS dans cette classe.

donc : ([^\.]*) signifie qu'on capture (parenthèses) toutes les chaines de caractères qui ne contiennent pas de point (crochets, ^ et caractère point \.) et contenant un nombre non défini de caractères (astérisque)

$ : indique que c'est la fin de la chaine

Le deuxième argument est la chaine de remplacement, par laquelle on remplace TOUTE LA CHAINE dans laquelle on fait la recherche.
$1 indique une référence. Il s'agit d'une référence au numéro du masque capturé (avec des parenthèses). $0 correspond à toute la chaine, $1 au premier masque, etc.

Ainsi, l'expression régulière capture la dernière "sous-chaine" qui correspond aux critères suivants :
- ne contient pas de point
- est précédée d'un point
Remplacer toute la chaine par ce qu'on capture renvoit donc l'extension.
Messages postés
32
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
20 avril 2008

Vraiment, un grand merci