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

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par bimaghra, 7 Octobre 2015.

  1. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    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);
    ?>
     
  2. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    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');
    
     
  3. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    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
     
  4. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    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 ?!!!!
     
  5. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    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');
     
  6. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    ReSalut Zeb avec
    Code:
    $doc =$pdf->Output('Invoice.pdf','F');
    j'ai le message suivant : FPDF error: Unable to create output file: Invoice.pdf !!!
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    * 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)
     
  8. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    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
     
  9. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    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)
    [​IMG]
    oui par exemple.
     
  10. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    bonjour
    voilà les droits que j'ai c'est comme l'image qui suit
    [​IMG]
    et j'arrive pas à les changer
    et j'ai copié un invoice.pdf sur le serveur mais ça ne changer rien
    Merci beaucoup
     
  11. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    et pour le dossier où se trouve ton script et pour le script lui même ?
     
  12. bimaghra
    bimaghra Nouveau WRInaute
    Inscrit:
    7 Octobre 2015
    Messages:
    7
    J'aime reçus:
    0
    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
     
  13. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 436
    J'aime reçus:
    0
    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
     
Chargement...
Similar Threads - php Générer apartir Forum Date
Générer du epub sur mon site en PHP Développement d'un site Web ou d'une appli mobile 10 Mai 2011
Générer un pdf à la volée avec php et mysql Développement d'un site Web ou d'une appli mobile 21 Avril 2010
afficher xml générer par du php Demandes d'avis et de conseils sur vos sites 28 Avril 2009
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
PHP : checkdnsrr (MX) et domaine yahoo.fr Développement d'un site Web ou d'une appli mobile 5 Septembre 2019
Migration site PHP vers Gatsby : quelques questions Problèmes de référencement spécifiques à vos sites 22 Août 2019
Rediriger sujet phpBB3 vers Vanilla 3 URL Rewriting et .htaccess 6 Août 2019
JS Ajax PHP e-MAIL Développement d'un site Web ou d'une appli mobile 17 Juin 2019
récupérer id en php sans lien Développement d'un site Web ou d'une appli mobile 25 Avril 2019
Autocomplete php avec 36000 résultats possible Développement d'un site Web ou d'une appli mobile 24 Mars 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice