Limiter la taille d'une pièce jointe [Résolu]

Signaler
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
4 novembre 2012
-
Messages postés
1
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
12 décembre 2012
-
Bonjour,

j'ai créé un formulaire avec la possibilité de joindre une ou plusieurs pièces jointes. J'ai créé une variable qui limite la taille du fichier, mais comment faire en sorte que la pièce jointe ne soit pas attachée au mail en cas de dépassement ? Faut-il agir (et comment) dans la lecture et mise en forme de PJ ou lors de l'attachement au mail.
Merci pour votre aide.
Voici des extraits de code :
//Lecture et mise en forme de la pièce jointe.
if (isset($_FILES['fichier1']) AND $_FILES['fichier1']['error'] == 0){
$file = $_FILES["fichier1"]["tmp_name"];
$file_name = $_FILES["fichier1"]["name"];
$fichier   = fopen($file, "rb");
$attachement = fread($fichier, filesize($file));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
if ($_FILES['fichier1']['error'] > 0) $erreur = "Erreur lors du transfert";	
$resultat = move_uploaded_file($_FILES['fichier1']['tmp_name'],"../email/1.jpg");
if ($resultat) echo "Transfert réussi";
echo $_FILES['fichier1']['tmp_name'];
echo $_FILES['fichier1']['name'];}


/////////////////
//ouverture frontière
$message.= $passage_ligne."--".$boundary.$passage_ligne;
 
//=====Ajout de la pièce jointe.
if (isset($_FILES['fichier1']) AND $_FILES['fichier1']['error'] == 0){
$message.= "Content-Type: image/jpeg; name="$file"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename="$file_name"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;}

//verif taille pièces jointes
if (isset($_FILES['fichier1']) && $_FILES['fichier1']['size'] > $maxsize) {echo "Votre 1ere photo n'a pu être envoyée car elle dépasse la limite de 1Mo";}
elseif (isset($_FILES['fichier1'])&& $_FILES['fichier1']['error'] == 0){echo "Votre 1ere photo a bien été envoyée";}else{echo "Pas de Photo1 envoyée";}

ironman

3 réponses

Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
30
Bonjour,

Je pense que tu devrais créer une variable supplémentaire qui contiendrai true si le fichier a la bonne taille sinon false.

Donc en gros tu ferai ta condition plus haut, un truc du style :

if($_FILES['fichier1']['size'] > $maxsize) {
$pb_size = true;
}

Et ensuite tu met ta condition avant de mettre le code pour la pièce jointe comme ceci :

if (isset($_FILES['fichier1']) AND $_FILES['fichier1']['error'] == 0){
if($pb_size) {
$message.= "Content-Type: image/jpeg; name="$file"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename="$file_name"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
}
}


Si la réponse vous convient, pensez : Réponse acceptée !
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
4 novembre 2012

Merci ça me parait bien, je vais tester. Merci


ironman
Messages postés
1
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
12 décembre 2012

bonsoir a vous,
j'ai un problem avec mn code php quand je l'exécute ya que les fichiers .txt qui sont lisible et les autres non, aidez moi svp voila mn code :
<?php
// To
$to = 'mn email';

// Subject
$subject = ' Test Mail';

// clé aléatoire de limite
$boundary = md5(uniqid(microtime(), TRUE));

// Headers
$headers = 'From: Adrien Pellegrini '."\r\n";
$headers .= 'Mime-Version: 1.0'."\r\n";
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
$headers .= "\r\n";

// Message
$msg = 'This is a multipart/mixed message.'."\r\n\r\n";

// Texte
$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
$msg .= 'Content-transfer-encoding:8bit'."\r\n";
$msg .= 'mon msg texte.'."\r\n";

// Pièce jointe
$file_name = $_FILES['piece_jointe']['tmp_name'];
if (file_exists($file_name))
{
$file_type = $_FILES['piece_jointe']['type'];
$file_size = filesize($file_name);

$handle = fopen($file_name, 'rb') or die('File '.$file_name.'can t be open');
$content = fread($handle, $file_size);
$content = chunk_split(base64_encode($content));
$f = fclose($handle);

$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type:'.$_FILES['piece_jointe']['type'].';name='.$_FILES['piece_jointe']['name']."\r\n";
$msg .= 'Content-transfer-encoding:base64'."\r\n";

$msg .= $content."\r\n";
}

// Fin
$msg .= '--'.$boundary."\r\n";

// Function mail()
mail($to, $subject, $msg, $headers);
?>