8791 sujets

Développement web côté serveur, CMS

Bonjour,

Dans un script php pour l'envoi de mail je dois attacher un fichier PDF.
Mon script de mail fonctionnait jusqu'à cet ajout.

Pour rechercher d'ou vient le problème, j'ai récupéré sur le net un script tout fait et modifier en conséquence mes sources de fichier. Que je mette un fichier PDF de 2Mo ou 27Ko, j'ai le même problème, le navigateur à sa barre de chargement qui tourne à l'infinie, le CPU sur le serveur monte et reste élevé (+85%).

Si ceci peut aidé :
Version Apache : 2.2.21
Version PHP : 5.2.17

Ci dessous le code récupéré modifier pour tester :


$to = "monmail@mondomaine.com"; 
$from = "me@domain.com"; 
$subject = "send email with pdf attachment"; 
$message = "<p>Please see the attachment.</p>";
 
// a random hash will be necessary to send mixed content
$separator = md5(time());
 
// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;
 
// attachment name
$filename = "pdf.pdf";
//$filename = "plaq5.pdf";
 
// encode data (puts attachment in proper format)
//$pdfdoc = $pdf->Output("", "S");


$dir = 'docs/plaquette/';
$fp = fopen($dir.$filename, "rb"); // b c'est pour les windowsiens 
$content = fread($fp, filesize($dir.$filename)); 
fclose($fp);

$attachment = chunk_split(base64_encode($content));
 
// main header (multipart mandatory)
$headers  = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol;
$headers .= "This is a MIME encoded message.".$eol.$eol;
 
// message
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$headers .= $message.$eol.$eol;
 
// attachment
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol;
$headers .= "Content-Disposition: attachment".$eol.$eol;
$headers .= $attachment.$eol.$eol;
$headers .= "--".$separator."--";
 
// send message
mail($to, $subject, "", $headers);


Merci de votre aide, car là je ne comprends pas (nota : c'est la 1ère fois que je fais de l'attachement).
Modérateur
Bonjour,

peut-être
$fp = fopen($dir.$filename, "rb"); // b c'est pour les windowsiens 

"b" ?? Il n'y a pas de b dans fopen. C'est quoi cette histoire de windows? De plus, vu les slash utilisés dans le pathm, je dirais qu’on n’est pas sur un serveur windows...
voir la doc: http://php.net/manual/fr/function.fopen.php