En php : Générer un pdf apartir de données d'un formulaire et l'envoyer par mail

Nouveau WRInaute
Bonjour à tous

Je génère un fichier pdf avec une facture et j'essaye de l'envoyer par mail

mais j'ai le message d'erreur suivant :

Warning: file_get_contents(Invoice.pdf) [function.file-get-contents]: failed to open stream: No such file or directory in /home/aisbeco/public_html/renadaptor/invoice.php on line 98
Language string failed to load: instantiate
Warning: Cannot modify header information - headers already sent by (output started at /home/aisbeco/public_html/renadaptor/invoice.php:98) in /home/aisbeco/public_html/renadaptor/invoice.php on line 130

en fait j'ai ce message quand je passe par un organisme de paiement : l'utilisateur rempli un formulaire puis on passe par un organisme de paiement en ligne

et puis je génère le fichier pdf et j'essaie de l'envoyer par mail,

Quand je sais des testes et je ne passe pas par l’organisme de paiement ça marche et je reçois le mail mais une fois que je passe cet organisme je reçois le message ci-dessus

j'espère que j'étais claire et que vous pouvez m'aider

merci d'avance

je vous mets le code que j'utilise :

Merci d'avance de votre aide :

Mon code :

Code:
<?php
require('fpdf.php');
# page header
#  logo
$pdf = new FPDF(P,pt);
$pdf->AddPage();
$pdf->Image('images/logo.jpg',40,40,235);
$pdf->SetFont('Times','B',12);
#  address and other infos

$pdf->SetXY(50,750);$pdf->Cell(0,12,'informatic',0,2);
$pdf->SetFont('Times','',10);
$pdf->SetXY(170,750);
$pdf->Cell(0,12,'adresse',0,2);
$pdf->Cell(0,12,'autres infos',0,2);

# user name and address
$pdf->SetFont('Times','',12);
$pdf->SetXY(320,160);$pdf->Cell(0,12,$_SESSION['Lastname'].' '.$_SESSION['Firstname'],0,2);
$pdf->Cell(0,12,$_SESSION['Address'],0,2);
$pdf->Cell(0,12,$_SESSION['Pcode'].' '.$_SESSION['City'],0,2);
$pdf->SetFont('Times','B',12);$pdf->Cell(20,12,$countries[$_SESSION['Country']],0,1);
# date
$pdf->SetFont('Times','',12);
$pdf->SetXY(370,260);$pdf->Cell(0,20,$_date.' '.date("d/m/Y").'.  '.$_dmy);
# content of invoice
$pdf->SetFont('Times','B',16);
$pdf->SetXY(80,350);$pdf->Cell(0,20,$_invoice.'   '.$_SESSION['Invoicenr']);
$pdf->SetFont('Times','',12);
$pdf->SetXY(100,405);$pdf->Cell(0,20,$_desc);
$price=substr($_SESSION['Price'],0,-2).'.'.substr($_SESSION['Price'],-2); # format price by inserting a decimal point
$totprice=substr($_SESSION['TotPrice'],0,-2).'.'.substr($_SESSION['TotPrice'],-2); # format TotPrice by inserting a decimal point
#if ($_SESSION['VatAmount']!=0)
if ($_SESSION['Country'] == 'BE')
   {$pdf->SetXY(450,405);$pdf->Cell(0,20,$price);
    $pdf->SetXY(100,425);$pdf->Cell(100,20,$_vat);
    $vatperc=substr($_SESSION['VatPerc'],0,-2).'.'.substr($_SESSION['VatPerc'],-2); # format VatPerc by inserting a decimal point
    # $pdf->SetXY(130,425);
    $pdf->Cell(100,20,$vatperc.' %');
    $vatamount=substr($_SESSION['VatAmount'],0,-2).'.'.substr($_SESSION['VatAmount'],-2); # format VatAmount by inserting a decimal point
    $pdf->SetXY(450,425);$pdf->Cell(40,20,$vatamount);
    $pdf->SetXY(100,460);$pdf->Cell(100,20,$_total);
    $pdf->SetXY(450,460);$pdf->Cell(40,20,$totprice);
   }
   else
   {$pdf->SetXY(450,405);$pdf->Cell(0,20,$totprice);
   }
$pdf->SetX(483);$pdf->Cell(0,20,'euros');
$doc =$pdf->Output('Invoice.pdf','S');

#---------------------   L'envoie de la facture par mail------------------------------------------------------------------------------------------------

    file_get_contents('Invoice.pdf');   
    $email = $_SESSION['Email'];
    $email = $email.', adresse miail';
    require "class.phpmailer.php";
    $mail = new PHPmailer();
    $mail->IsHTML(true);
   
    $mail->FromName = "Webmaster";   
    $mail->From='webmaster@monsite.net';
    $mail->AddAddress($email, "Subject");
    $mail->AddReplyTo('no reply');   
    $mail->Subject='Your Invoice ';
    $mail->Body=($invoice);
    $mail->AddStringAttachment($doc, 'Invoice.pdf', 'base64', 'application/pdf');
    $mail->Send();

     if(!$mail->Send()){
      echo $mail->ErrorInfo;
    }
    else{
 
      echo 'Mail envoyé avec succès';
        }
    $mail->SmtpClose();
    unset($mail);
?>
 
WRInaute passionné
Tu "oublies" de récupérer le contenu du fichier dans une chaine de caractères, et donc tu envoies ce contenu en sortie vers l'utilsateur, c'est pour cela qu'on te dit "headers already sent"....
Je pense que tu as le choix de passer par un string intermédiaire ou pas
Il faut faire soit :

Code:
// file_get_contents('Invoice.pdf');     // supprimer cette ligne qui ne sert à rien
// et plus bas 
$mail->AddStringAttachment($doc, 'Invoice.pdf', 'base64', 'application/pdf');

ou bien

Code:
$invoice = file_get_contents('Invoice.pdf');   
// et plus bas 
$mail->AddStringAttachment($doc, $invoice, 'base64', 'application/pdf');
 
WRInaute accro
Tu te mélange les crayons dans les formats

$doc =$pdf->Output('Invoice.pdf','S');
S : renvoyer le document sous forme de chaîne. name est ignoré.

Ton pdf n'est pas enregistré en tant que fichier ... (a ce sujet tu devrais composer le nom de fichier pour éviter des écritures concurentes)

Warning: file_get_contents(Invoice.pdf) [function.file-get-contents]: failed to open stream: No such file
donc c'est normal qu'on le trouve pas ensuite ...

=> $doc =$pdf->Output('Invoice.pdf','F'); (F : sauver dans un fichier local, avec le nom indiqué dans name (peut inclure un répertoire))

le "Warning: Cannot modify header information - headers already sent by" est juste du au fait que ton script a envoyé un message d'erreur il disparaîtra quand tu aura corrigé ll'erreur
 
Nouveau WRInaute
Salut Zeb tu crois que je remplacer le
Code:
$doc =$pdf->Output('Invoice.pdf','S');
par
Code:
$doc =$pdf->Output('Invoice.pdf','F');
Et pas besoin de donner le chemin du fichier ?!!!!
 
Nouveau WRInaute
Salut MikeR j'ai déjà essayer sans le // file_get_contents('Invoice.pdf'); et j'ai eu le même message
maintenant j vais essayer avec
$invoice = file_get_contents('Invoice.pdf');

$mail->AddStringAttachment($doc, $invoice, 'base64', 'application/pdf');
 
Nouveau WRInaute
ReSalut Zeb avec
Code:
$doc =$pdf->Output('Invoice.pdf','F');
j'ai le message suivant : FPDF error: Unable to create output file: Invoice.pdf !!!
 
WRInaute accro
bimaghra a dit:
FPDF error: Unable to create output file: Invoice.pdf !!!
* Peut être préciser le chemin global en dur mais normalement cela devrait se créer dans le répertoire de travail (donc celui de ton script). > /home/aisbeco/public_html/renadaptor/Invoice.pdf
* Voir aussi si ton script 'invoice.php' à un droit d'écriture dans le dossier où il se trouve.
* Sinon parfois forcer la création du pdf "à la main" permet d'outrepasser un blocage (auquel cas ton script écraserais la version que tu as créée)
 
Nouveau WRInaute
excuse moi mais comment savoir si mon script 'invoice.php' à un droit d'écriture dans le dossier où il se trouve???
et comment forcer la création du pdf "à la main"? copier un fichier "invoice.pdf" dans le répertoire de travail ?
bien @ toi
 
WRInaute accro
Utilise ton client FTP pour voir les droits du fichier php sur ton serveur et ceux du dossier qui le contiens.
Un exemple (qui ne correspond pas forcement)
filezilla05-fr.png

copier un fichier "invoice.pdf" dans le répertoire de travail ?
oui par exemple.
 
Nouveau WRInaute
bonjour
voilà les droits que j'ai c'est comme l'image qui suit
chmod2.gif

et j'arrive pas à les changer
et j'ai copié un invoice.pdf sur le serveur mais ça ne changer rien
Merci beaucoup
 
Nouveau WRInaute
j'ai changé de tactique j'affiche le fichier pdf dans une nouvelle fenêtre et je laisse le choix à l'utilisateur de le sauver ou l'imprimer
j'ai peur de donner plus de droits sur le serveur
Merci pour tout Zeb
 
WRInaute accro
faire attention que le répertoire "de travail" n'est pas obligatoirement celui du script permettant de créer le pdf, mais celui du premier script appelant
 
Discussions similaires
Haut