[PHP] Joindre un fichier dans un mail

digival Messages postés 209 Statut Membre -  
digival Messages postés 209 Statut Membre -
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 209 Statut Membre 1
 
- back'up ! -
0
Natio78 Messages postés 742 Statut Membre 96
 
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 209 Statut Membre 1
 
"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 742 Statut Membre 96
 
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 209 Statut Membre 1
 
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 209 Statut Membre 1
 
- back'up ! -
0