Renommer un fichier uploadé

cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010 - 28 janv. 2010 à 17:01
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 30 janv. 2010 à 10:41
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

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
28 janv. 2010 à 19:15
Salut,

move_uploaded_file() est là pour ça.
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
28 janv. 2010 à 20:21
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
0
jhomsoft Messages postés 12 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
28 janv. 2010 à 21:41
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.
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 09:17
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
0

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

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
29 janv. 2010 à 10:32
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']));
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 10:43
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
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 12:05
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
30 janv. 2010 à 10:41
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.
0
Rejoignez-nous