Posez votre question Signaler

Php renommer un fichier [Résolu]

nanaixme 12Messages postés 11 juin 2007Date d'inscription - Dernière réponse le 8 mars 2010 à 17:32
je voudrais savoir si il est possible et comment faire pour renommer un fichier uploadé en fonction d'un choix effectué dans des checkbox d'un formulaire.
Le code de mon form est :
<table id="choixMarque">	
	<tr >
	        <td><input type="checkbox" name="choixMarquePrincipal[]" value="luminarc" id="luminarc"></td>
		<td>Luminarc</td>				
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="mikasa" id="mikasa"></td>
		<td>Mikasa</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="mikasa Oenologie" id="mikasaOenologie"></td>
		<td>Mikasa oenologie</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="studio Nova" id="sn"></td>
		<td>Studio Nova</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="cda" id="cda"></td>
		<td>Cristal d'Arques</td>
	</tr>
</table>

Il faudrait que je renomme mon fichier uploadé en fonction de ce qu'à cocher l'utilisateur entre les marques.
Voilà le code de mon upload de fichier :
<?

// Récupération du dossier dans lequel le fichier sera uploadé	
$DESTINATION_FOLDER = 'upload/' ;								
// Taille maximale de fichier, valeur en bytes					
$MAX_SIZE = 50000000 ;													
// Définition des extensions de fichier autorisées (avec le ".")
$AUTH_EXT = array( ".jpg", ".jpeg") ;											


// Fonction permettant de vérifier si l'extension du fichier est
// autorisée.

function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}

// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.

if(!empty($_FILES['fichier1']["name"])){
	
	// Nom du fichier choisi:
	$nomFichier = $_FILES['fichier1']["name"] ;
	// Nom temporaire sur le serveur:
	$nomTemporaire = $_FILES['fichier1']["tmp_name"] ;
	// Type du fichier choisi:
	$typeFichier = $_FILES['fichier1']["type"] ;
	// Poids en octets du fichier choisit:
	$poidsFichier = $_FILES['fichier1']["size"] ;
	// Code de l'erreur si jamais il y en a une:
	$codeErreur = $_FILES['fichier1']["error"] ;
	// Extension du fichier
	$extension = strrchr($nomFichier, ".") ;
	
	// Si le poids du fichier est de 0 bytes, le fichier est
	// invalide (ou le chemin incorrect) => message d'erreur
	// sinon, le script continue.
	if($poidsFichier <> 0){
		// Si la taille du fichier est supérieure à la taille
		// maximum spécifiée => message d'erreur
		if($poidsFichier < $MAX_SIZE){
			// On teste ensuite si le fichier a une extension autorisée
			if(isExtAuthorized($extension)){
				// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER . $nomFichier) ;
			}else{
				echo ("Files with extension $extension can't be upload<br>") ;
			}
		}else{
			$tailleKo = $MAX_SIZE / 1000;
			echo("You can't upload files with higher size than tailleKo Ko.<br>");
		}		
	}else{
		echo("The selected file is not correct <br>");
	}
}else{
	echo("You didn't choose a file<br>");
}
Lire la suite 

Php renommer un fichier »

15 réponses
Réponse
+9
moins plus
utilise la fonction rename:
<?
rename(nom_depart, nom_nouveau);
?>

donc dans ton cas sa donnerai sa:

$nomFichier = $_FILES['fichier1']["name"] ;
$NewNomFichier = 'LeNomQueTuVeut';
rename($nomFichier, $NewNomFichier);
nanaixme- 11 juin 2007 à 16:07
J'ai utilisé la fonction rename(), mon souci vient plus du fait que le nouveau nom de mon fichier doit etre récupérer dans le tableau choixMarquePrincipal[]

En théorie, je devrais faire si je comprends bien

$nomFichier=$_FILES['fichier1']["name"] ;
$newNomFichier=$choixMarquePrincipal[$i] ;
rename($nomFichier,$newNomFichier) ;

mais comment parcourir mon tableau $choixMarquePrincipal[] et vérifier qu'une case est cochée
Ajouter un commentaire
Réponse
+2
moins plus
Cela marche correctement, j'ai fait des petites modifs ds mon script autour.

Encore une question, mes fichiers ne seront que des images jpg ou jpeg lorsque je regarde mon répertoire où je stocke mes images, l'image renommée n'a pas d'extension. Il y a une possibilité de garder la mm extension après le renommage ?
Ajouter un commentaire
Réponse
+2
moins plus
J'avais bien modifié le script avec le bon nom de variable. Dc avc ttes modifications des bouts de scripts cela donne ca :

script du formulaire :
<table id="choixMarque">	
	<tr >
	       <td><input type="checkbox" name="choixMarquePrincipal[]" value="luminarc" id="luminarc"></td>
	       <td>Luminarc</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="mikasa" id="mikasa"></td>
		<td>Mikasa</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="mikasa Oenologie" id="mikasaOenologie"></td>
		<td>Mikasa oenologie</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="studio Nova" id="sn"></td>
		<td>Studio Nova</td>
		<td><input type="checkbox" name="choixMarquePrincipal[]" value="cda" id="cda"></td>
		<td>Cristal d'Arques</td>
	</tr>
</table>


Script pour récupérer les données
//TRONC COMMMUN	
	$NewNomFichier = "" ; //variable de renommage de fichier uploadé et affiche le nom de la marque
	if (isset($_POST['choixMarquePrincipal'])) {
		for ($i = 0, $c = count($_POST['choixMarquePrincipal']); $i < $c; $i++) {
			$NewNomFichier = $NewNomFichier . $_POST['choixMarquePrincipal'][$i] ;
		}
	} 
	
	$NewNomFichier2 = "" ; //variable de renommage de fichier uploadé et affiche le nom du "what"
	if(isset($_POST['choixForm'])) {
		for($i=0,$c=count($_POST['choixForm']); $i<$c; $i++){ 
			$NewNomFichier2 = $NewNomFichier2 . $_POST['choixForm'][$i] ;
		}
	} 


script d'upload avc renommage de fichier :

// Récupération du dossier dans lequel le fichier sera uploadé	
$DESTINATION_FOLDER = 'upload/' ;								
// Taille maximale de fichier, valeur en bytes					
$MAX_SIZE = 50000000 ;													
// Définition des extensions de fichier autorisées (avec le ".")
$AUTH_EXT = array( ".jpg", ".jpeg") ;											


// Fonction permettant de vérifier si l'extension du fichier est
// autorisée.

function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}

// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.

if(!empty($_FILES['fichier1']["name"])){
	
	// Nom du fichier choisi:
	$nomFichier = $_FILES['fichier1']["name"] ;
	// Nom temporaire sur le serveur:
	$nomTemporaire = $_FILES['fichier1']["tmp_name"] ;
	// Type du fichier choisi:
	$typeFichier = $_FILES['fichier1']["type"] ;
	// Poids en octets du fichier choisit:
	$poidsFichier = $_FILES['fichier1']["size"] ;
	// Code de l'erreur si jamais il y en a une:
	$codeErreur = $_FILES['fichier1']["error"] ;
	// Extension du fichier
	$extension = strrchr($nomFichier, ".") ;
	
	// Si le poids du fichier est de 0 bytes, le fichier est
	// invalide (ou le chemin incorrect) => message d'erreur
	// sinon, le script continue.
	if($poidsFichier <> 0){
		// Si la taille du fichier est supérieure à la taille
		// maximum spécifiée => message d'erreur
		if($poidsFichier < $MAX_SIZE){
			// On teste ensuite si le fichier a une extension autorisée
			if(isExtAuthorized($extension)){
				// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER . $nomFichier) ;
				rename($DESTINATION_FOLDER.$nomFichier, $DESTINATION_FOLDER.$NewNomFichier."_".$NewNomFichier2) ; 



Pr le renommage j'ai rajouté une variable suite à une nouvelle demande du client mais cela marche correctement
Ajouter un commentaire
Réponse
+1
moins plus
Si j'ai bien compris, l'utilisateur doit selectionner le nom de son fichier a partir de ta liste mais, il doit en choisir qu'un seul? Si oui, il faut utilise plutot des boutons radio donc sa donnerai sa:
formulaire de choix du nom:
<table id="choixMarque">
<tr >
<td><input type="radio" name="choixMarquePrincipal" value="luminarc" id="luminarc"></td>
<td>Luminarc</td>
<td><input type="radio" name="choixMarquePrincipal" value="mikasa" id="mikasa"></td>
<td>Mikasa</td>
<td><input type="radio" name="choixMarquePrincipal" value="mikasa Oenologie" id="mikasaOenologie"></td>
<td>Mikasa oenologie</td>
<td><input type="radio" name="choixMarquePrincipal" value="studio Nova" id="sn"></td>
<td>Studio Nova</td>
<td><input type="radio" name="choixMarquePrincipal" value="cda" id="cda"></td>
<td>Cristal d'Arques</td>
</tr>
</table>

Ensuite, tu recupere toute les données de ton fichier mais nul part tu ne recupere les donnée de tes bouton donc quelque part dans ton code:
if (isset($_GET['choixMarquePrincipal'] (ou $_POST)) {
$NewNomFichier = $_GET['choixMarquePrincipal']; //sa va ecrire dans la variable le value
}
et apres tu aura:
$nomFichier=$_FILES['fichier1']["name"] ;
rename($nomFichier,$newNomFichier) ;

Normalement sa doit marcher, si s'est bien se que tu veux
Ajouter un commentaire
Réponse
+1
moins plus
L'utlisateur a la possibilité de cocher pls marques c'est pr cela que ce sont des checkbox et non des boutons radios.

j'ai des écrit un fichier où je récupère les données en $_POST :

if (isset($_POST['choixMarque'])) {
$choixMarque="" ;
for($i=0,$c=count($_POST['choixMarque']); $i<$c; $i++){
$choixMarque.= $_POST['choixMarque'][$i] ;
}
}

Je vais essayer ce que tu m'as dit...
Ajouter un commentaire
Réponse
+1
moins plus
Je veux bien utiliser des checkbox, le probleme s'est qu'un fichier peux avoir QU'UN SEUL NOM ^^. donc si il en selectionne plusieur, apres faut soit que tu lui demande lequel il veux comme non soit que tu le choississent toi meme.
Si tu leur fait choisir le nom principale:
tu peux faire un 2eme formulaire avec une liste deroulante qui contient les nom choisit et il doivent choisir le nom du fichier.
exemple si tu le choisit toi meme:
tu met un ordre de priorite au nom: si X, Y, Z sont coché, alors s'est X qui est utilise. si A, X, B est coché, s'est A qui est utilisé.
Ajouter un commentaire
Réponse
+1
moins plus
J'avais pensé au principe de priorité du nom de marque si il y en a pls mais mon client désire voir apparaitre ts les noms de marque. Je pensais dc concaténer les noms de marque si c'est possible mais ce qui vt dire qu'il faut parcourir le tableau pr savoir quelle marque est cochée ou non.

Je ne sais pas si je suis claire.
Ajouter un commentaire
Réponse
+1
moins plus
Je vais chercher ou ete l'erreur mais voila le code qui devrai marcher:

le formulaire avec des case a cocher:
<table>
<tr >
<td><input type="checkbox" name="choixMarquePrincipal[]" value="luminarc" id="luminarc"></td>
<td>Luminarc</td>
<td><input type="checkbox" name="choixMarquePrincipal[]" value="mikasa" id="mikasa"></td>
<td>Mikasa</td>
<td><input type="checkbox" name="choixMarquePrincipal[]" value="mikasa Oenologie" id="mikasaOenologie"></td>
<td>Mikasa oenologie</td>
<td><input type="checkbox" name="choixMarquePrincipal[]" value="studio Nova" id="sn"></td>
<td>Studio Nova</td>
<td><input type="checkbox" name="choixMarquePrincipal[1" value="cda" id="cda"></td>
<td>Cristal d'Arques</td>
</tr>
</table>
(il y a pas le <form> et le <submit>, je supose qu'il est plus loin dans ton formulaire?)

et dans le code:
pour renommer j'ai pris ta derniere idée, je recupere tout les valeur des cases coché et je les concatenne pour faire un nom:
$NewNomFichier = "";
if (isset($_POST['choixMarquePrincipal'])) {
for ($i = 0, $c = count($_POST['choixMarquePrincipal']); $i < $c; $i++) {
$NewNomFichier = $NewNomFichier . $_POST['choixMarquePrincipal'][$i];
}
}

et enfin:
$nomFichier=$_FILES['fichier1']["name"] ;
rename($nomFichier, $NewNomFichier) ;

En theorie, sa marche!!
Ajouter un commentaire
Réponse
+1
moins plus
A moins que tu ai reecrit le code dans le post, ton erreur est toute simple:

dans ton formulaire du 1er post, tu ecrit sa:
<td><input type="checkbox" name="choixMarquePrincipal[]" value="luminarc" id="luminarc"></td>

et dans un post ou tu ecrit ton code de recuperation tu ecrit sa:
if (isset($_POST['choixMarque'])) {
$choixMarque="" ;
for($i=0,$c=count($_POST['choixMarque']); $i<$c; $i++){
$choixMarque.= $_POST['choixMarque'][$i] ;
}
}


A mon avis, ton erreur vient juste du fait que la variable $_POST['choixMarque'] n'existe pas car ton formulaire envoie un $POST de choixMarquePrincipal
La variable que tu recupere doit avoir EXACTEMENT le meme nom a la majuscule pres, sinon php pensera que se ne sont pas les memes.
Ajouter un commentaire
Réponse
+1
moins plus
Juste avant le rename tu fait sa:
$extension = ".jpg"
$NewNomFichier = $NewNomFichier . $extension
rename($nomFichier, $NewNomFichier) ;
Ajouter un commentaire
Réponse
+1
moins plus
Voilà ca marche impeccable, merci pr ton aide
losdiabolos - 3 mars 2010 à 16:45
Bonjour, je cherches depuis un moment comment renommer un fichier. J'ai ce bout de code dont je ne comprend rien (à part en gros il m'eupload un fichier dans un dossier photos) :
<?php if (isset($_FILES['Filedata']['name'])) {

   $uploadDir = "./photos/";

$uploadFile = $uploadDir . basename($_FILES['Filedata']['name']);

move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile);


}  ?>


J'ai lu plein de choses sur les différentes méthodes pour renommer mais j'ai pas réussi à en faire marché une seule, vu que je n'y connais pas grand chose en php, si quelqu'un peut m'aider mercil
Ajouter un commentaire
Réponse
+1
moins plus
la fonction rename de php fait sa tres bien:

$nomFichierActuel = "/mesphoto/gallery1/toto.jpg";
$NewNomFichier = "/mesphoto/gallery1/titi.jpg";
rename($nomFichierActuel, $NewNomFichier) ;

Tu peux aussi t'en servir pour le déplacer:
$nomFichierActuel = "/mesphoto/gallery1/toto.jpg";
$NewNomFichier = "/mesphoto/gallery2/titi.jpg";
rename($nomFichierActuel, $NewNomFichier) ;
Ajouter un commentaire
Réponse
+1
moins plus
merci Camuke j'ai trouvé la réponse à mon pb:
<?php if (isset($_FILES['Filedata']['name'])) {

   $uploadDir = "./photos/";

$uploadFile = $uploadDir ."ma_photo.jpg". ($_FILES['Filedata']['ma_photo.jpg']);
echo " ";
move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile);
echo " ";
}  ?>

Ça doit être un peu barbare mais ça marche.
Ajouter un commentaire
Ce document intitulé « php renommer un fichier » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?