Renommer un fichier uploadé

Signaler
Messages postés
32
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
1 février 2010
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
Je m'arrache les cheveux sur un problème qui est sans doute simple à résoudre, mais, bon, vraiment, je n'y arrive pas !

J'ai fait un formulaire sur mon site internet. Ce formulaire sert à m'envoyer des fichiers.

J'ai 2 variables :

$tmp = $_FILES['file']['tmp_name'];
$nomOrigine = $_FILES['file']['name'];


J'utilise PhpMailer pour envoyer le fichier par mail, donc j'ai dans mon script :

$mail->AddAttachment($tmp);


Je n'utilise pas de base de données.

Je reçois bien mon fichier en pièce jointe, mais il m'arrive avec le nom temporaire du serveur ($temp).
J'aimerai recevoir ce fichier avec son nom d'origine.

Comment puis-je renommer le fichier temporaire pour ensuite le mettre dans $mail->AddAttachment();

Merci d'avance à tout ceux qui voudront bien m'aider !!

8 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

move_uploaded_file() est là pour ça.
Messages postés
32
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
1 février 2010

Merci pour ta réponse, TychoBrahe !

Effectivement j'avais trouvé ça sur les forum, mais manifestement je ne sais pas m'en servir... ça ne fonctionne toujours pas !

Je fais ça :

move_uploaded_file($tmp, $nomOrigine);


Est-ce que ça devrait fonctionner comme ça ?

Elisa
Messages postés
12
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
28 janvier 2010

Salut elisa effectivement la fonction move_upload_file est faite pour ca
dans le chm de php il y a :

bool move_uploaded_file ( string filename, string destination )

move_uploaded_file() s'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.

Par contre dans ton formulaire il faut bien que tu ais la propriété
ENCTYPE='multipart/form-data' sinon php le prend comme un formulaire simple.
Tiens mois au courant.
Messages postés
32
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
1 février 2010

Bonjour jhomsoft !

Merci pour ta réponse.

J'ai bien ENCTYPE='multipart/form-data' dans mon formulaire.

Tu m'expliques que filename est déplacé vers destination.

Du coup, j'ai fait :
$tmp = $_FILES['file1']['tmp_name'];

$nomOrigine = $_FILES['file1']['name'];

move_uploaded_file($tmp, $nomOrigine);


=> Je ne reçois plus de pièce jointe et j'ai un message d'erreur :
Could not access file: ---nom d'origine du fichier---

qu'est-ce que je fais de travers ?!

Merci d'avance pour ton aide !

Elisa
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Assure toi que tu as bien les droits d'écriture (+w) sur le répertoire de destination. Sinon par précaution, utilises donc le basename() du nom original du fichier. J'ajouterai que passer par des variables intermédiaires ($tmp et $nomOrigine) ne sert à rien sinon à rendre ton code plus lourd et plus dur à lire, la ligne suivant est largement suffisante :
move_uploaded_file($_FILES['file1']['tmp_name'], basename($_FILES['file1']['name']));
Messages postés
32
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
1 février 2010

Merci pour ta réponse !

J'ai fait ce que tu m'as dit, mais ça ne fonctionne pas.
J'ai le message d'erreur "Could not access file: "

comment puis-je vérifier si j'ai les droits en écriture ?

Elisa
Messages postés
32
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
1 février 2010

Re !

C'est bon, je n'ai plus le message d'erreur !

Par contre, je reçois toujours mon fichier attaché avec son nom temporaire...

J'ai beau tout essayer et dans tous les sens, je n'y arrive pas !

Si je fais :
move_uploaded_file($_FILES['file1']['tmp_name'], basename($_FILES['file1']['name']));


comme tu me le conseilles, comment est-ce que je peux vérifier que le changement de nom a bien eu lieu ?

Est-ce qu'on peut faire :
echo $_FILES['file1']['tmp_name'];


Merci d'avance !

Elisa
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

comment puis-je vérifier si j'ai les droits en écriture ?

Avec un `ls -ld` sur le répertoire de destination. Juste une remarque, il est très dangereux de donner les droits d'écriture sur le répertoire racine du site, utilises plutôt un sous-dossier. Par, si j'upload un fichier qui as le même nom qu'un des fichiers qui y est présent (par exemple index.php je suppose), ton fichier sera écrasé au profit du mien.