[PHP] Joindre un fichier dans un mail

Fermé
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 - 15 nov. 2009 à 20:16
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 - 19 nov. 2009 à 16:30
Bonjour,

Sur mon site, il y a une page où le client peut uploader une image et me l'envoyer par mail.
Pour cela, j'ai copié le script d'un tuto que j'ai maintenant compris mais il me reste un mystère :

Pourquoi j'ai ces messages d'erreur ci-dessous sur ma page ?
Warning: fopen(image.jpg) [function.fopen]: failed to open stream: No such file or directory in ...
Warning: filesize() [function.filesize]: Stat failed for image.jpg (errno=2 - No such file or directory) in ...
Warning: fread(): supplied argument is not a valid stream resource in ...
Warning: fclose(): supplied argument is not a valid stream resource in ...


Les lignes faisant référence à la lecture et la mise en forme du fichier joint :
$fichier   = fopen("image.jpg", "r");
$attachement = fread($fichier, filesize("image.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);



Comme vous pouvez le voir, le fichier étant nommé dans ce tuto "image.jpg", il n'est pas adapté à mon but :
Il faudrait en effet que le nom et l'extension du fichier soient les mêmes que ceux du fichier uploadé.
Même chose donc dans ces lignes :
$message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;


Voici mon script concernant l'image :
<label for="image" style="margin-left: 3%" >image :</label> <input name="image" type="file" /> <br />
   <?php
  // -- Définition des standarts --
  $nom_image = md5(uniqid(rand(), true));
  $infosfichier = pathinfo($_FILES['image']['name']);
  $extension_upload = $infosfichier['extension'];
  $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
  $image_sizes = getimagesize($_FILES['image']['tmp_name']);
  $maxsize = 1500000; // octets   (1 000 000 octets = 1 Mo)
  $maxwidth = 15; // ?
  $maxheight = 15; // ?
  // ---------------------------------
   if( isset($_POST['image']) )
   {
    if( isset($_FILES['image']) )
    {
      if( $_FILES['image']['error'] == 0 ) // Si aucune erreur détectée dans d'upload
      {
	    if( $_FILES['image']['size'] < $maxsize )  // Si la taille est acceptée    
	    { 
	      if( $image_sizes[0] < $maxwidth   OR   $image_sizes[1] < $maxheight ) // Si les dimansions sont acceptées
	      {
	        if( in_array($extension_upload, $extensions_autorisees) )
	        { 
		     move_uploaded_file($_FILES['image']['tmp_name'],$nom_image);
		     mkdir('fichier/ptf_vente_images/', 0777, true); // Création du dossier "fichier/ptf_vente_images/"
			 $imagevalide = true
           ;}
		  else { echo '<em style="color: red"> Oups ! Une erreur est survenue : Recommence ! </em>' ;}
		 ;} 
	     else { echo '<em style="color: red"> image invalide : ses dimensions sont trop grandes ! </em>' ;}
	   ;}
	   else { echo '<em style="color: red"> image invalide : sa taille ne doit pas dépasser 1,5 Mo ! (seules les extensions jpg, jpeg, gif et png sont acceptées) </em>' ;}	
     ;}
     else { echo  '<em style="color: red"> Oups ! Une erreur est survenue : Recommence ! </em>' ;} 
   ;}
   else { echo '<em style="color: red"> Aucune image a été envoyée ! </em>' ;} 
  ;}
  ?>


-> Donc, pour résumer, Comment réadapter le nom du fichier pour mon cas et Pourquoi j'ai ces messages d'erreurs ci-dessus ??
A voir également:

6 réponses

digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 1
16 nov. 2009 à 18:09
- back'up ! -
0
Natio78 Messages postés 719 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 27 mai 2013 96
17 nov. 2009 à 11:01
c'est assez clair il te dit en gros que ton fichier image.jpg n'existe pas....
Regarde quelques tuto sur POST et GET en php tu vas pouvoir récupérer le nom et l'extension de l'image uploadé =)
0
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 1
17 nov. 2009 à 13:12
"image.jpg n'existe pas" , ça j'avais bien compris mais je voulais surtout savoir comment le faire reconnaître le fichier ?
0
Natio78 Messages postés 719 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 27 mai 2013 96
18 nov. 2009 à 09:40
je t'ai dit grâce aux variables POST si tu utilises un formulaire pour l'upload de l'image
0

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

Posez votre question
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 1
18 nov. 2009 à 17:39
Oui, ça aussi j'ai compris ^^

En clair, tu me conseilles de mettre au lieu de ça...
$fichier   = fopen("image.jpg", "r");
$attachement = fread($fichier, filesize("image.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
[...]
$message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;


... cela ? :
$fichier   = fopen("$_POST['image']", "r");
$attachement = fread($fichier, filesize("$_POST['image']"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
[...]
$message.= "Content-Type: image/jpeg; name=\"$_POST['image']\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"$_POST['image']\"".$passage_ligne;


-> Je peux pas le tester, ma fonction mail est bloquée :( , mais je crois avoir déjà essayé sans succès...
0
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 1
19 nov. 2009 à 16:30
- back'up ! -
0