[PHP] Joindre un fichier dans un mail
digival
Messages postés
209
Statut
Membre
-
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 :
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 :
Voici mon script concernant l'image :
-> Donc, pour résumer, Comment réadapter le nom du fichier pour mon cas et Pourquoi j'ai ces messages d'erreurs ci-dessus ??
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:
- [PHP] Joindre un fichier dans un mail
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Creer un fichier .bat - Guide
6 réponses
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é =)
Regarde quelques tuto sur POST et GET en php tu vas pouvoir récupérer le nom et l'extension de l'image uploadé =)
"image.jpg n'existe pas" , ça j'avais bien compris mais je voulais surtout savoir comment le faire reconnaître le fichier ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui, ça aussi j'ai compris ^^
En clair, tu me conseilles de mettre au lieu de ça...
... cela ? :
-> Je peux pas le tester, ma fonction mail est bloquée :( , mais je crois avoir déjà essayé sans succès...
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...