Envois mail plusieurs fichier
RésoluSinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Je sollicite votre aide afin de m'aider à corriger mon code.
Je ne peu envoyer qu'une seule pièce jointe alors que je souhaite pouvoir envoyer 10 fichiers le tout pour 10Mo.
Pouvez-vous m'aider svp ?
if (move_uploaded_file($_FILES['Fr_Photos']['tmp_name'], $upload_file)) {$ext = explode(".", basename($_FILES['Fr_Photos']['name']));
switch($ext[1]) {default: $attach_type = "application/octet-stream"; break;
case "jpg": case"jpeg": $attach_type = "image/jpeg"; break;
case "png": $attach_type1 = "image/png"; break;
case "bmp": $attach_type1 = "image/bmp"; break;
case "pdf": $attach_type1 = "application/pdf"; break;
case "txt": $attach_type1 = "text/plain"; break;}
if(file_exists($upload_file)) {
$file = fopen($upload_file, "r");
$contents = fread($file, filesize($upload_file));
$encoded_attach = chunk_split(base64_encode($contents));
fclose($file);}
$EmailDesti = MAIL_PERSONNEL;
$LeSujet = utf8_decode($INSCRIPTION." de ".$data['Titre']);
$LeMessageHTML = "<html><head><meta charset='utf-8'></head><body>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF
."</body></html>";
$PieceJointe = $upload_file;
//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html = $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen($PieceJointe, "r");
$attachement = fread($fichier, filesize($PieceJointe));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//=====Définition du sujet.
$sujet = $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: application/pdf; name=".$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){
Merci de votre aide.
- Envois mail plusieurs fichier
- Fichier epub - Guide
- Fichier bin - Guide
- Fichier .dat - Guide
- Fichier 7z - Guide
- Fichier rar - Guide
11 réponses
Plusieurs développeurs cherchent à envoyer simultanément dix fichiers pesant au total 10 Mo via un formulaire PHP et une gestion d’upload côté serveur. Les échanges montrent que l’utilisation d’un seul champ input et le parcours des tableaux $_FILES nécessitent un foreach et une nomenclature Fr_Photos[] pour itérer chaque fichier. Des solutions évoquées portent sur l’extension des fichiers, le calcul de taille maximale, le traitement en base64 des pièces jointes et la construction correcte des boundaries MIME pour l’e-mail. Certains messages soulignent aussi qu’une bonne structuration HTML (Fr_Photos[] comme nom de champ) et le test préalable des dimensions et du type de chaque fichier évitent des erreurs comme des indices inexistants.
Dis voir .. côté formulaire html .. tes "input" file ... sont bien nommés sous forme d'array ?
input type = "file" name = "Fr_Photos[]" ..
Sinon..normal qu'il n'en récupère qu'un.....
bien entendu ... côté php .. tu devras ensuite faire un foreach pour parcourir CHAQUE fichier
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos){
foreach ($Fr_Photos as $fichier ){
$upload_file= $fichier['name'];
$tmp_name =$fichier['tmp_name'];
if (move_uploaded_file($tmp_name, $upload_file)) {
$ext = explode(".", basename( $upload_file ));
// .. etc...
// .... le code de traitement à effectuer pour chaque fichier
// ...
}
}
}
Donc testes ceci :
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
$extensions = array('.jpg', '.jpeg','.png','.bmp','.pdf');
$taille_maxi = 10485760;
$nbr_max_file = 10;
$erreur = "";
//na pas oublier de renseigner cette variable :
$dirToUpload = "repertoire_ou_mettre_les_fichiers/";
if($Fr_Photos){
if (count($Fr_Photos['name']) > $nbr_max_file) {
$erreur .= "<li>• Trop de fichiers uploadés</li>";
}else{
foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
$tmp_name =$Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if(!in_array($extension, $extensions)){
$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
}else{
if($taille > $taille_maxi){
$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
}else{
if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
$attachement = chunk_split(base64_encode(file_get_contents($tmp_name)));
$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
}else{
$erreur.="<li>• Erreur lors de l'upload </li>";
}
}
}
}
}
}
A adapter à ton besoin par la suite bien entendu...
Lorsque j'ajoute des fichiers "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" et n'envoie que le "10"
C'est un
<input name="upload" id="upload" type="file" multiple>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
$upload_file = $_FILES['Fr_Photos']['name'];
if (move_uploaded_file($_FILES['Fr_Photos']['tmp_name'], $upload_file)) {$ext = explode(".", basename($_FILES['Fr_Photos']['name']));
$PieceJointe = $upload_file;
$EmailDesti = "Sujet du mail";
$LeSujet = utf8_decode($INSCRIPTION." de ".$data['Titre']);
$LeMessageHTML = "<html><head><meta charset='utf-8'></head><body><div style='font-family: Futura;'>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF
."</div></body></html>";
//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html = $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen($PieceJointe, "r");
$attachement = fread($fichier, filesize($PieceJointe));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//=====Définition du sujet.
$sujet = $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: application/pdf; name=".$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){
$ok_mail="true";
}else{$erreur.='<div class="erreur-1"><div class="erreur-2"><div class="erreur-3"></div><div class="erreur-4">'.$MESSAGE_ERROR.'</div><div class="erreur-5">'.$ERREUR_ERROR_1.'</div></div></div>';}}
}}
Je ne rencontre que des erreurs :\
<?php
$extensions = array('.jpg', '.jpeg','.png','.bmp','.pdf');
$taille_maxi = 10485760;
$nbr_max_file = 10;
$extension = strrchr($upload_file['name'], '.');
$taille = filesize($upload_file['tmp_name']);
if(!in_array($extension, $extensions)) {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille>$taille_maxi) {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
if(count($upload_file['name']) > $nbr_max_file) {$erreur.="<li>• Trop de fichiers uploadés</li>";}
// Création du message
if($erreur==""){
foreach($_FILES as $upload_file){
$tmp_name = file_get_contents($upload_file['tmp_name']);
$attachement = chunk_split(base64_encode($tmp_name));
$EmailDesti = LE_MAIL;
$LeSujet = $data['Titre'];
$LeMessageHTML = "<html></html>";
//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html = $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
foreach($_FILES as $upload_file){
$tmp_name = file_get_contents($upload_file['tmp_name']);
$attachement = chunk_split(base64_encode($tmp_name));
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//=====Définition du sujet.
$sujet = $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
}
//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){
$ok_mail="true";
}else{$erreur.="<li>".$ERREUR_ERROR_1."</li>";}}
}
?>
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
Par exemple .... où as tu vu que je faisais un
foreach($_FILES as $upload_file){
Moi j'ai écris :
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos){
foreach ($Fr_Photos as $fichier ){
Ensuite .. comment penses tu que :
$extension = strrchr($upload_file['name'], '.');
$taille = filesize($upload_file['tmp_name']);
if(!in_array($extension, $extensions)) {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille>$taille_maxi) {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
puis se faire AVANT le foreach ????
Je te laisse corriger .... là ce n'est que de la logique.....
$Fr_Photos = !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos){
foreach ($Fr_Photos as $upload_file ){
$upload_file = $upload_file['name'];
$tmp_name = $upload_file['tmp_name'];
$extension = strrchr($upload_file['name'], '.');
$taille = filesize($upload_file['tmp_name']);
$tmp_myname = file_get_contents($upload_file['tmp_name']);
$attachement = chunk_split(base64_encode($tmp_myname));
if (move_uploaded_file($tmp_name, $upload_file)) {
if(!in_array($extension, $extensions)) {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille > $taille_maxi) {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
if(count($upload_file) > $nbr_max_file) {$erreur.="<li>• Trop de fichiers uploadés</li>";}
$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
}}}
Voici le print_r :
Array ( [Fr_Photos] => Array ( [name] => Array ( [0] => 01.txt [1] => 02.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /tmp/phpbhEjC0 [1] => /tmp/phpaNUCrD ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 7 [1] => 7 ) ) )
Et voici le code d'erreur :
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
foreach ($Fr_Photos as $upload_file ){
$upload_file = $upload_file['name']; // ICI !!!! upload_file = upload_file.. bref.. tu écrase la variable par un morceau d'elle même ... on se retrouve dans les mondes parallèles ... ^^
Ne vois tu pas l'erreur ?
Encore une fois ... moi j'avais écrit :
foreach ($Fr_Photos as $fichier ){
$upload_file= $fichier['name'];
$tmp_name =$fichier['tmp_name'];
Sais tu faire des copier/coller ? Oo
$Fr_Photos = !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos){
foreach ($Fr_Photos as $fichier){
$upload_type = $fichier['type'];
$upload_file = $fichier['name'];
$tmp_name = $fichier['tmp_name'];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
$tmp_myname = file_get_contents($tmp_name);
$attachement = chunk_split(base64_encode($tmp_myname));
if (move_uploaded_file($tmp_name, $upload_file)) {
if(!in_array($extension, $extensions))
{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille > $taille_maxi)
{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
if(count($upload_file) > $nbr_max_file)
{$erreur.="<li>• Trop de fichiers uploadés</li>";}
$message.= 'Content-type:'.$upload_type.';name='.$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
}}}
Voici l'erreur pour une seule pièce jointe :
Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77
Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77
Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77
Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77
Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77
Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78
Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
Voici le contenu du
print_r ($_FILES);pour 1 fichier :
Array ( [Fr_Photos] => Array (
[name] => Array ( [0] => 01.txt ) [type] => Array ( [0] => text/plain )
[tmp_name] => Array ( [0] => /tmp/phpLvcDNk )
[error] => Array ( [0] => 0 )
[size] => Array ( [0] => 7 ) ) )
Voici le contenu du
print_r ($_FILES);pour 2 fichiers :
Array ( [Fr_Photos] => Array (
[name] => Array ( [0] => 01.txt [1] => 02.txt )
[type] => Array ( [0] => text/plain [1] => text/plain )
[tmp_name] => Array ( [0] => /tmp/phpXBOUcn [1] => /tmp/phpMKQcCp )
[error] => Array ( [0] => 0 [1] => 0 )
[size] => Array ( [0] => 7 [1] => 7 ) ) )
Le code HTML et PHP :
https://paste2.org/m1Usv7cy
L'erreur rencontrée dans les 2 cas:
Notice: Undefined variable: extension in /home/serveur/www/bonjour/inscription.php on line 73
Notice: Undefined variable: taille in /home/serveur/www/bonjour/inscription.php on line 74
Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80
Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81
Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82
Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80
Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81
Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82
Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80
Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81
Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82
Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80
Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81
Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82
Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80
Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81
Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82
Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
Donc 7 minutes plus tôt (que le tien...) .. j'ai écrit : https://forums.commentcamarche.net/forum/affich-34524529-envois-mail-plusieurs-fichier#23
Warning: file_get_contents(/tmp/phpfqFX5W): failed to open stream: No such file or directory in /home/serveur/www/bonjour/inscription.php on line 95
Warning: Illegal string offset 'type' in /home/serveur/www/bonjour/inscription.php on line 96
Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 96
Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 98
Warning: file_get_contents(/tmp/php6naVow): failed to open stream: No such file or directory in /home/serveur/www/bonjour/inscription.php on line 95
Warning: Illegal string offset 'type' in /home/serveur/www/bonjour/inscription.php on line 96
Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 96
Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 98
Array ( [Fr_Photos] => Array ( [name] => Array ( [0] => 01.txt [1] => 02.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /tmp/phpfqFX5W [1] => /tmp/php6naVow ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 7 [1] => 7 ) ) )
ATT00001.txt (240 o)
Voici le code adapté :
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
$extensions = array('.jpg','.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi = 10485760;
$nbr_max_file = 10;
$erreur = "";
//na pas oublier de renseigner cette variable :
$dirToUpload = "photos/";
if($Fr_Photos){
if (count($Fr_Photos['name']) > $nbr_max_file) {
$erreur .= "<li>• Trop de fichiers uploadés</li>";
}else{
foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
$tmp_name = $Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if(!in_array($extension, $extensions)){
$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
}else{
if($taille > $taille_maxi){
$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
}else{
if (move_uploaded_file($dirToUpload.$upload_file, $dirToUpload.$upload_file)) {
$attachement = chunk_split(base64_encode(file_get_contents($dirToUpload.$upload_file)));
$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
}else{
$erreur.="<li>• Erreur lors de l'upload</li>";
}
}
}
}
}
}
if (move_uploaded_file($dirToUpload.$upload_file, $dirToUpload.$upload_file)) {
.... le "tmp_name" ... il ne fallait le remplacer QUE dans la ligne qui provoquait l'erreur ... celle que je t'avais mis .....
celle la :
$attachement = chunk_split(base64_encode(file_get_contents($tmp_name)));
que je te disais de remplacer comme ceci :
$attachement = chunk_split(base64_encode(file_get_contents($dirToUpload . $upload_file)));
et puis .... dans les lignes suivantes :
$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
... faudrait pt'être remplacer les $upload_file['type']. et $upload_file['name']. ... par les variables que nous avons initié avant ... à savoir respectivement $upload_type et $upload_file ....
Il faut vraiment que tu apprennes à te relire et pas juste à "coller" des bouts de code.... mais tu dois t’astreindre à essayer de les comprendre !!!!
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
$extensions = array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi = 10485760;
$nbr_max_file = 10;
$erreur = "";
//na pas oublier de renseigner cette variable :
$dirToUpload = "upload/";
if($Fr_Photos){
if (count($Fr_Photos['name']) > $nbr_max_file) {
$erreur .= "<li>• Trop de fichiers uploadés</li>";
}else{
foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
$tmp_name =$Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if(!in_array($extension, $extensions)){
$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
}else{
if($taille > $taille_maxi){
$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
}else{
if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
$attachement = chunk_split(base64_encode(file_get_contents($dirToUpload . $upload_file)));
$message.= 'Content-type:'.$upload_type.';name='.$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
}else{
$erreur.="<li>• Erreur lors de l'upload </li>";
}
}
}
}
}
}
Ce qui fonctionne :
- Je ne reçois aucune erreur.
- Le mail est maintenant en HTML.
- Je reçois toutes les pièces jointes.
- L'encodage passe parfaitement.
Ce qui ne va pas :
- J'ai une pièce jointe supplémentaire AT00001.txt (240 o)
functions.php :
function sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message="",$attach = NULL){
$header = "From: $Fr_AdresseMail";
// boundary
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// header for attachment
$header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\"";
// multipart boundary
$message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n\n";
$message.= "--{$mime_boundary}\n";
//Ajout des pieces jointes si il y en a
if(!empty($attach)){
foreach($attach as $pj){
$file = fopen($pj,"rb");
$data = fread($file,filesize($pj));
fclose($file);
$data = chunk_split(base64_encode($data));
$fileName = basename($pj);
$message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n\n";
$message.= "--{$mime_boundary}\n";
}
}
// send
if(mail($EmailDesti, $sujet, $message, $header)) {return true;} else {return false;}
}
inscription.php :
<?php include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php"); ?>
<?php
if(isset($_POST['Envoyer'])){$erreur="";
// Nettoyage des entrées
while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}
// Création du message
if($erreur==""){
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}
$extensions = array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi = 10485760;
$nbr_max_file = 10;
$erreur = "";
$dirToUpload = "upload/";
$filesToAttach = array();
$header.= "From: ".$Fr_AdresseMail;
$EmailDesti = MAIL_PERSONNEL;
$sujet = utf8_decode($CASTING_INSCRIPTION." de ".$data['Titre']);
$message = "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)
.$TablF
."</body></html>";
//=====Ajout de la pièce jointe.
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos){
if (count($Fr_Photos['name']) > $nbr_max_file) {
$erreur .= "<li>• Trop de fichiers uploadés</li>";
}else{
foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
$tmp_name =$Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if(!in_array($extension, $extensions)){
$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
}else{
if($taille > $taille_maxi){
$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
}else{
if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
$filesToAttach[] = $dirToUpload . $upload_file;
}else{
$erreur.="<li>• Erreur lors de l'upload </li>";
}
}
}
}
}
}
if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR."</li>";}}
}
?>
<?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
<form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
<?php if($erreur){ echo $MESSAGE_ERROR; } ?>
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
<button name="Envoyer" type="submit">Envoyer</button>
</form>
<?php }; ?>
https://forums.commentcamarche.net/forum/affich-34524529-envois-mail-plusieurs-fichier#39
Si la taille du fichier est > à
$tailleet/ou le nombre de fichier dépasse
$nbr_max_file, le mail part tout de même mais avec ATT00001.txt
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos)
{
if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur .= "<li>• Trop de fichiers uploadés</li>";}else
{
foreach ($Fr_Photos['name'] as $indice=>$upload_file )
{
$tmp_name = $Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if(!in_array($extension, $extensions)){$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
else
{
if($taille > $taille_maxi)
{
$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
}
else
{
if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {$filesToAttach[] = $dirToUpload . $upload_file;}else{$erreur.="<li>• Erreur lors de l'upload </li>";}
}
}
}
}
}
https://exchange-server-guide.blogspot.com/2015/11/att00001.txt-file-fix-email-attachment-issue.html
Voici enfin un code qui fonctionne (sauf erreur de ma part) :
<?php
function sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message="",$attach = NULL){
$header = "From: $Fr_AdresseMail";
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\"";
$message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n\n";
$message.= "--{$mime_boundary}\n";
if(!empty($attach)){
foreach($attach as $pj){
$file = fopen($pj,"rb");
$data = fread($file,filesize($pj));
fclose($file);
$data = chunk_split(base64_encode($data));
$fileName = basename($pj);
$message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n\n";
$message.= "--{$mime_boundary}\n";
}
}
if(mail($EmailDesti, $sujet, $message, $header)) {return true;} else {return false;}
}
//####################################################
if(isset($_POST['Envoyer'])){$erreur="";
while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}
$extensions = array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi = 1024;
$nbr_max_file = 10;
$erreur = "";
$dirToUpload = "upload/";
$filesToAttach = array();
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos)
{
if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur.= "<li>• Trop de fichiers uploadés</li>";} else {
foreach ($Fr_Photos['name'] as $indice=>$upload_file )
{
$tmp_name = $Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if (!in_array($extension, $extensions)) {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";} else {
if ($taille > $taille_maxi) {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";} else {
if (!move_uploaded_file($tmp_name, $dirToUpload.$upload_file)) {$erreur.="<li>• Erreur lors de l'upload </li>";} else {$filesToAttach[] = $dirToUpload.$upload_file;}}}
}
}
}
if($erreur==""){
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}
$header = "From: ".$Fr_AdresseMail;
$EmailDesti = MAIL_PERSONNEL;
$sujet = utf8_decode($data['Titre']);
$message = "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>".$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF."</body></html>";
if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR."</li>";}}
}
opendir('upload');$handle=opendir('upload');while (false !== ($fichier = readdir($handle)))@unlink('upload/'.$fichier);
?>
<?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
<form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
<?php if($erreur){ echo $MESSAGE_ERROR; } ?>
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
<button name="Envoyer" type="submit">Envoyer</button>
</form>
<?php } ?>
Merci à toi Jordane pour ton temps et ta précieuse aide.
<?php
function sendEmail($EmailDesti, $Fr_AdresseMail, $sujet, $message = "", $attach = NULL)
{
$header = "From: $Fr_AdresseMail";
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\"";
$message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n";
if (!empty($attach))
{
foreach($attach as $indice=>$pj)
{
$file = fopen($pj, "rb");
$data = fread($file, filesize($pj));
fclose($file);
$data = chunk_split(base64_encode($data));
$fileName = basename($pj);
$message.= "--{$mime_boundary}\n";
$message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n";
}
}
$message.= "--{$mime_boundary}--\n";
return mail($EmailDesti, $sujet, $message, $header);
}
?>
<?php
if(isset($_POST['Envoyer'])){$erreur="";
// Nettoyage des entrées
while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}
$extensions = array('.jpg', '.jpeg','.png','.bmp','.pdf');
$taille_maxi = 10485760;
$nbr_max_file = 10;
$erreur = "";
$dirToUpload = "upload/";
$filesToAttach = array();
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
if($Fr_Photos)
{
if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur.= "<li>• Trop de fichiers uploadés</li>";} else {
foreach ($Fr_Photos['name'] as $indice=>$upload_file )
{
$tmp_name = $Fr_Photos['tmp_name'][$indice];
$upload_type = $Fr_Photos['type'][$indice];
$extension = strrchr($upload_file, '.');
$taille = filesize($tmp_name);
if (!in_array($extension, $extensions)) {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";} else {
if ($taille > $taille_maxi) {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";} else {
if (!move_uploaded_file($tmp_name, $dirToUpload.$upload_file)) {$erreur.="<li>• Erreur lors de l'upload </li>";} else {$filesToAttach[] = $dirToUpload.$upload_file;}}}
}
}
}
// Création du message
if($erreur==""){
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}
$header = "From: ".$Fr_AdresseMail;
$EmailDesti = MAIL_PERSONNEL;
$sujet = utf8_decode($data['Titre']);
$message = "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>".$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)
.$TablF."</body></html>";
if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR_1."</li>";}}
opendir('upload');$handle=opendir('upload');while (false !== ($fichier = readdir($handle)))@unlink('upload/'.$fichier);
?>
<?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
<form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
<?php if($erreur){ echo $MESSAGE_ERROR; } ?>
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
<button name="Envoyer" type="submit">Envoyer</button>
</form>
<?php } ?>