IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Renommer fichier sans écraser


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut Renommer fichier sans écraser
    Bonjour,

    j'ai mis en place un formulaire d'édition avec upload à gérer. vu qu'il s'agit d'édition, certains fichiers existe déjà sur le serveur.

    je souhaiterai renommer les anciens fichiers au cas où on uploaderai des nouveau sur le serveur.
    pour ce qui est du renommage pas de soucis j'utilise la fonction et la pour mettre en place un système de versionnage.

    mon soucis est dans le cas où le nouveau fichier uploadé a le même nom que celui présent sur le serveur.
    dans ce cas il écrase l'ancien.

    voici un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    $ValidationSON = (move_uploaded_file($_FILES['fichierSON']['tmp_name'],$rep.$_FILES['fichierSON']['name']));
    			$ValidationTRS = (move_uploaded_file($_FILES['fichierTRS']['tmp_name'],$rep.$_FILES['fichierTRS']['name']));
    			$ValidationCONVENTION =(move_uploaded_file($_FILES['convention_transcription']['tmp_name'],$rep.$_FILES['convention_transcription']['name']));
    			$ValidationANNEXE =(move_uploaded_file($_FILES['document_annexe']['tmp_name'],$rep.$_FILES['document_annexe']['name']));
     
     
    			//si on choisit d'uploader un fichier alors on créée une alerte avec le nom des fichiers
    			if($ValidationSON | $ValidationTRS | $ValidationCONVENTION |$ValidationANNEXE ){
    				//message de confirmation JS, comme quoi le fichier est bien enregistré sur le serveur
    				echo "<script type=\"text/javascript\">alert(\"Vos fichiers : \\n- ".$_FILES['fichierSON']['name']."\\n- ".$_FILES['fichierTRS']['name']."\\n- ".$_FILES['convention_transcription']['name']."\\n ont bien été enregistré !\");</script>";
     
    				//si le fichier est bien uploadé alors on renomme l'ancien s'il existe
    				if($ValidationSON){
    					rename("../Corpus/$NomFichierSource/$Statut_corpus/$SoundName_bak", "../Corpus/$NomFichierSource/$Statut_corpus/$today-$SoundName_bak" );
     
    				}
    				if($ValidationTRS){
    					rename("../Corpus/$NomFichierSource/$Statut_corpus/$TrsName_bak", "../Corpus/$NomFichierSource/$Statut_corpus/$today-$TrsName_bak" );
     
    				}
    				if($ValidationCONVENTION){
    					//si ce nest pas vide
    					if(!empty($convention_transcription_bak)){
    						rename("../Corpus/$NomFichierSource/$Statut_corpus/$convention_transcription_bak", "../Corpus/$NomFichierSource/$Statut_corpus/$today-$convention_transcription_bak" );
    					}
    				}
    				if($ValidationANNEXE){
    					//si ce nest pas vide
    					if(!empty($AnnexeName_bak)){
    						rename("../Corpus/$NomFichierSource/$Statut_corpus/$AnnexeName_bak", "../Corpus/$NomFichierSource/$Statut_corpus/$today-$AnnexeName_bak" );
    					}
    				}
     
    			}
    jexplique : en fait si l'un des fichiers est envoyé sur le serveur j'affiche une alerte avec le nom des fichiers uploadés.
    dans le meme temps si un des types de fichiers est bien envoyé alors on renomme l'ancien grace à une variable de type "_bak" qui permet de récupérer les anciens noms de fichiers.

    je veux être sur qu'il y ait eu upload avant de renommer un éventuel fichier; voila pourquoi je bloque.

    merci

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    alors si j'ai bien tout compris, AVANT le move_uploaded_file() vérifie si le fichier vers le quel tu souhaite l'envoyer existe déjà (file_exists()) si c'est le cas, ben tu modifies le nom de destination.

    Par contre, si tu souhaite que ce soit la derniere version qui ai le nom "générique" disons, alors il faut :

    1] vérifier que le fichier existe => si pas le cas hop hop move_uploaded_file()
    2] s'il existe, copy() du fichier actuel vers un fichier d'un autre nom
    3] move_uploaded_file()

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    alors si j'ai bien tout compris, AVANT le move_uploaded_file() vérifie si le fichier vers le quel tu souhaite l'envoyer existe déjà (file_exists()) si c'est le cas, ben tu modifies le nom de destination.

    Par contre, si tu souhaite que ce soit la derniere version qui ai le nom "générique" disons, alors il faut :

    1] vérifier que le fichier existe => si pas le cas hop hop move_uploaded_file()
    2] s'il existe, copy() du fichier actuel vers un fichier d'un autre nom
    3] move_uploaded_file()
    voila c'est le deuxieme cas de figure. c'est la derniere version uploadé qui garde le nom générique.
    par contre si j'ai bien compris je dois vérifier avant l'upload et renommer avant l'upload du dernier fichier ?

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par knebhi Voir le message
    par contre si j'ai bien compris je dois vérifier avant l'upload et renommer avant l'upload du dernier fichier ?
    non !

    D'abord faire l'upload et toutes les vérifications (type, poids, etcc) une fois le fichier uploadé il faut vérifier si le fichier de destination existe déjà, si oui on le copie vers un autre nom et ensuite on déplace le fichier temporaire uploadé vers le bon fichier (move_uploaded_files())

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    ok je vois ce que tu veux dire.

    alors voila un bout de code qui m'a l'air de fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $fileSoundToUpload = $rep.$_FILES['fichierSON']['name'];
     
     
    			$filenameSound_bak = "../Corpus/$NomFichierSource/$Statut_corpus/$SoundName_bak";
    			$filenameSound_new = "../Corpus/$NomFichierSource/$Statut_corpus/$today-$SoundName_bak";
    			//si le fichier existe
    			if(file_exists($fileSoundToUpload)){
     
    				copy($filenameSound_bak, $filenameSound_new);
    				$ValidationSON = (move_uploaded_file($_FILES['fichierSON']['tmp_name'],$rep.$_FILES['fichierSON']['name']));
     
    			}
    			//sinon on renomme l'ancien
    			else{
    				rename("../Corpus/$NomFichierSource/$Statut_corpus/$SoundName_bak", "../Corpus/$NomFichierSource/$Statut_corpus/$today-$SoundName_bak" );
    				$ValidationSON = (move_uploaded_file($_FILES['fichierSON']['tmp_name'],$rep.$_FILES['fichierSON']['name']));
     
    			}
    le soucis c'est qu'il fait toujours la commande . c'est a dire que meme en cas de non-upload il renomme le fichier . c'est tout a fait normal mais il faudrait que je lui indique d'effectuer cela que lorsque un fichier est envoyé sur le serveur.

    tu as une idée?
    j'ai pensé betement a une chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_FILES['fichierSON']['size']>0)
    alors on effectue le code
    ten pense quoi?

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if (!$_FILES['fichierSON']['error']) {
       /// alors on effectue le code
    } else {
              switch ($_FILES['nom_du_fichier']['error']){
                       case 1: // UPLOAD_ERR_INI_SIZE
                       echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";
                       break;
                       case 2: // UPLOAD_ERR_FORM_SIZE
                       echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !");
                       break;
                       case 3: // UPLOAD_ERR_PARTIAL
                       echo "L'envoi du fichier a été interrompu pendant le transfert !";
                       break;
                       case 4: // UPLOAD_ERR_NO_FILE
                       echo "Le fichier que vous avez envoyé a une taille nulle !");
                       break;
              }
     
    }

Discussions similaires

  1. Ajout dans un fichier sans écraser
    Par Lazypanda dans le forum Débuter
    Réponses: 4
    Dernier message: 06/02/2009, 17h41
  2. pb écriture en début de fichier sans écraser
    Par sebdu dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 12h45
  3. Ajouter une ligne en fin de fichier sans écraser le fichier
    Par Premium dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 05/04/2007, 14h07
  4. Réponses: 2
    Dernier message: 05/04/2007, 10h39
  5. Réponses: 6
    Dernier message: 23/12/2005, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo