Php renommer un fichier

Résolu/Fermé
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 - 11 juin 2007 à 15:42
losdiabolos Messages postés 61 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 17 décembre 2010 - 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>");
}
A voir également:

13 réponses

Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
11 juin 2007 à 15:54
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);
20
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 20
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
0
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 20
12 juin 2007 à 12:40
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 ?
2
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 20
12 juin 2007 à 13:15
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
2
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
12 juin 2007 à 09:53
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
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 20
12 juin 2007 à 11:20
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...
1
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
12 juin 2007 à 11:36
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é.
1
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 20
12 juin 2007 à 11:53
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.
1
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
12 juin 2007 à 12:16
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!!
1
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
12 juin 2007 à 12:47
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.
1
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
12 juin 2007 à 12:52
Juste avant le rename tu fait sa:
$extension = ".jpg"
$NewNomFichier = $NewNomFichier . $extension
rename($nomFichier, $NewNomFichier) ;
1
nanaixme Messages postés 12 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 14 juin 2007 20
12 juin 2007 à 13:25
Voilà ca marche impeccable, merci pr ton aide
1
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
0
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
8 mars 2010 à 13:06
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) ;
1
losdiabolos Messages postés 61 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 17 décembre 2010 16
8 mars 2010 à 17:32
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.
1