Page 1 sur 1

Envoi de mail avec pièces jointes en php

Publié : 18 mars 2005, 12:39
par SB
Salut.
J'ai un petit souci avec un code d'upload de fichiers que j'ai trouvé sur le net. Tous mes fichiers sont uploadés sous le même nom, à savoir "mail", ce qui me pose 2 problèmes. Ces fichiers étant destinés à être envoyés en pièce jointe par mail ça me limite à une seule pièce jointe puisque chaque upload écrase le précédent. D'autre part comme l'extension est supprimé celui qui reçoit la pièce ne sait jamais quel programme utiliser. J'avoue que je ne m'y connait pas du tout avec cette fonction. Quelqu'un voit-il comment changer cela ?
Merci.

Code : Tout sélectionner

<?php /*fonction d'upload de fichier */
function uploadProg($source) {
$ok_copy=move_uploaded_file($source,"mail/"); // a remplacer par le repertoire ou sera uploadé le fichier
if($ok_copy==true) {echo "Fichier chargé<br />";}
if($ok_copy==false) {print("Erreur : le fichier n'a pu être chargé !<br />");}
}
?>
<label for="upload">Pièce jointe</label><br />
<input type="file" name="upload" />
<input type="hidden" name="action" value="uploadProg" />
<input type="hidden" name="MAX_FILE_SIZE" value="2048" /><!-- taille max du fichier -->
<input type="submit" name="charger" value="Charger la pièce jointe" /><br /><br />
<?
if($action=="uploadProg"){uploadProg($upload);}
?>

Publié : 18 mars 2005, 12:57
par Blustuff
Chez moi le code que vous donnez ne marche pas. (toujours en echec sur move) En revanche, j'ai le nom du fichier, ainsi que son extension. Si le nom vous gêne génerez donc des noms différents à chaque fois, non ?

Publié : 18 mars 2005, 16:10
par GregK84
voici une autre methode qui fonctionne relativement bien (meme si le traitement peut etre un peu lourd par moment)

http://www.zdnet.fr/builder/programmati ... 927,00.htm

PS: c'est sur la 4eme pages :wink:

Publié : 18 mars 2005, 16:16
par SB
Bon j'ai résolu le problème en utilisant la fonction rename() après l'upload. Mais j'ai l'impression qu'il y avait plus simple et je n'ai toujours pas compris d'où pouvait venir ce nom par défaut de "mail". :?

Publié : 18 mars 2005, 16:31
par GregK84
cela pourrait venir de ta variable "$source"

http://be2.php.net/manual/fr/function.m ... d-file.php

meme si j'ai des doutes ...

EDIT :

c le chemin du fichier et puis son nom (et pas le nom du repertoire... il me semble)

Code : Tout sélectionner

<?php
move_uploaded_file(
  $_FILES["file"]["tmp_name"],
  $dir . preg_replace('/[^a-z0-9_\-\.]/i', '_', $_FILES["file"]["name"])
);
?>

Publié : 18 mars 2005, 16:52
par Blustuff
Hem... oui, lien plus interessant encore : http://be2.php.net/manual/fr/features.file-upload.php

Où vous avez toutes les informations sur la marche à suivre. En particulier on peut voir un très interessant :

Code : Tout sélectionner

print_r($_FILES);
Très explicite. En revanche, on voit que l'eemple que vous donnez au début comporte quelques erreurs : La taille max doit être spécifiée avant le champs fichier. Je ne comprends pas très bien comment vous accèdez au nom du fichier sinon, en fait, je ne vois même pas comment ça peut marcher :/

Publié : 18 mars 2005, 17:08
par GregK84
Blustuff a écrit :

Code : Tout sélectionner

<pre> <?php print_r($_FILES); ?> </pre>
pour une meilleur lisibilité :wink:

Publié : 18 mars 2005, 17:16
par SB
Et pourtant ça marche.
Je vois les choses comme ça :
Le champ

Code : Tout sélectionner

<input type="file" name="upload" />
prend la valeur du fichier temporaire, un truc genre /var/www/.... Lorsqu'on appuie sur "charger la pièce jointe" on recharge la page avec une variable $action (<input type="hidden" name="action" value="uploadProg" />) qui a pour effet d'envoyer la valeur à la fonction uploadProg

Code : Tout sélectionner

if($action=="uploadProg"){uploadProg($upload);} 
La fonction transfert le fichier à l'aide de move_uploaded_file. Je suppose que c'est mon serveur qui transforme le nom temporaire "/var/www/..." en "mail" d'après le répertoire de destination.

Publié : 18 mars 2005, 17:30
par GregK84
tu peux faire un test, tu nome ton repertoire autrement que mail et tu verras bien si ton fichier prend un autre nom ...

je pense que ton fichier est renomé par mail a cause de ta ligne :

Code : Tout sélectionner

"mail/"
mais bon si cela fonctionne c le principal :P parfois il ne faut pas chercher a comprendre :wink: