Parse error: syntax error, unexpected 'ob_start' (T_STRING)

Résolu
Bonjour,

j'essaye de générer un PDF et je suis tout au début de la démarche, voici mon code:

<?php
$data = serialize(file_get_contents('datas.txt'))
ob_start(); 
?>

<table>
 <tr>
  <td>Salut</td>
 </tr>
</table>

<?php
$content = ob_get_clean();
require('html2pdf/html2pdf.class.php');

try
{
 $pdf = new HTML2PDF('P', 'A4', 'fr');
 $pdf->pdf->SetDisplayMode('fullpage');
 $pdf->writeHTML($content);
 $pdf->Output('test.pdf');
}
catch(HTML2PDF_exception $e)
{
 die($e);
}
?>


J'ai un problème à la troisième ligne de mon code.

Est ce que quelqu'un pourrait m'aider svp?

15 réponses

Résumé de la discussion

Le fil porte sur un problème de génération de PDF en PHP avec HTML2PDF, lié à une ligne où un point-virgule manque et où du contenu est envoyé avant l'appel à Output. Plusieurs réponses soulignent qu'une sortie prématurée peut provenir d'une ligne vide, d'un encodage UTF-8 avec BOM ou d'affichages d'erreurs, et recommandent de supprimer toute sortie avant Output et d'enregistrer le fichier sans BOM. Des conseils concrets proposent d'utiliser un contenu HTML préformaté sans espaces superflus, d'éteindre l'affichage des erreurs avec ini_set et d'utiliser WriteHTML puis Output dans le bon ordre. En complément, certains indiquent que la présence d'une ligne vide après la balise PHP ou l'encodage sans BOM peut être déterminant pour éviter l'erreur dans ce contexte.

Bobot (l’IA à votre service)
  1. Bonjour

    Tu as oublié le point-virgule à la fin de la ligne précédente.
    2
    1. Pffff j'avais même pas vu, ce sont des erreurs que je pense qui sont vérifiées avant de poster sur un forum d'assistance informatique, je cherche tout de suite un problème plus important ^^
      0
    2. 1455 interventions...
      Tu devrais savoir que 99% des gens qui posent des questions ici ne vérifient rien du tout ^^
      0
    3. je suis vraiment désolée pour cette erreur à la con.
      0
    4. Pas grave
      0
  2. As-tu posé la question sur le forum HTML2PHP ?
    1
    1. J'y ai pensé aussi, mais je me suis dit qu'il n'y avait pas vraiment de raison pour que le problème vienne de HTML2PDF* ; je pense que c'est juste un problème de transmission des informations à la fonction qui créé le PDF, d'où la définition plus claire de la variable $content.
      0
    2. Non j'ai pas posé la question sur le forum de HTML2PHP

      Vous pensez que c'est nécessaire à ce niveau que je le fasse?
      0
    3. Quel rapport ???
      La variable $content dont F2C parlait dans sa première question est très bien définie par
      $content = ob_get_clean();
      ,F2C ne se plaint pas d'une erreur sur cette ligne.
      As-tu remarqué que F2C nous parle maintenant d'un problème qui n'a strictement aucun rapport avec le premier ?
      0
    4. Hou là, c'est limite agressif ce que tu me répond là, alors la solution pour toi c'est d'envoyer les utilisateurs vers l'éditeur de leur logiciel pour qu'ils se débrouillent ? Donc si on suit ton raisonnement, le prochain qui a un bug avec Windows on le renvoie directement vers Microsoft ? Si tu n'as pas envie de l'aider, libre à toi, mais vient pas m'ennuyer avec ces détails et laisse moi essayer de régler son problème sans l'assistance de HTML2PDF qui ne l'aidera certainement pas.
      0
  3. Salut,

    Ton erreur "TCPDF ERROR: Some data has already been output, can't send PDF file" indique que tu envoie du contenu avant la fin de ton code ($html2pdf->Output('exemple.pdf')).

    Ton fichier ne serait pas enregistrer en utf-8 avec BOM par hasard ? Pour vérifier, tu peux utiliser Notepad++ par exemple, menu Encodage.
    Ton fichier php doit être encodé sans BOM.

    Bonne journée
    1
    1. Salut,
      c'est encodé UTF-8 sans BOM
      0
  4. L'affichage du contenu avant la fin de ton code peut venir également de :
    - un affichage en php (echo, print_r, var_dump...)
    - des notices ou warning php si les erreurs sont affichées
    - une ligne html vide

    Essaye avec ce code :
    <?php
        // pas de ligne vide avant la balise php
    
        // on désactive l'affichage des erreurs
        ini_set('display_errors', TRUE);
    
        $content = "
    <page>
        <h1>Exemple d'utilisation</h1>
        <br>
        Ceci est un <b>exemple d'utilisation</b>
        de <a href='http://html2pdf.fr/'>HTML2PDF</a>.<br>
    </page>";
    
        require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php');
        $html2pdf = new HTML2PDF('P','A4','fr');
        $html2pdf->WriteHTML($content); // in $content you put your content to have in pdf
        $html2pdf->Output('exemple.pdf');
    
        // pas besoin de fermer la balise php à la fin
    
    1
    1. OMG!!! Merci ça fonctionne très bien.
      0
    2. Je n'ai finalement pas compris la résolution de ce problème ^^ Encore je pourrais comprendre avec l'utilisation de
      ob_start();
      mais là je ne vois pas la différence entre ton code et le mien si ce n'est l'ajout de
      ini_set('display_errors', TRUE);
      (qui au passage active l'affichage des erreurs ?) et le fait que tu ne fermes pas la balise PHP à la fin...
      0
    3. Effectivement c'est ini_set('display_errors', FALSE); pour désactiver l'affichage des erreurs.

      Mais le problème venait surement d'une ligne vide après la balise de fermeture php, ce qui est considéré comme du contenu html.
      0
  5. Vraiment Vraiment désolée pour cette erreur à la con.

    J'ai un problème plus sérieux et là c'est vraiment pas des bêtises.

    En fait j'ai téléchargé la classe HTML2PHP et c'est avec ça que je travaille.
    Mais j'ai des lignes et des lignes d'erreur du style

    Undefined index: rowspan in C:\wamp\www\html2pdf\html2pdf.class.php on line 5251

    Est ce que vous pourriez m'aider SVP SVP??
    0
    1. TCPDF ERROR: Some data has already been output, can't send PDF file

      Nouvelle erreur
      0
      1. Peux tu essayer avec un autre navigateur ? Tu étais sur lequel ? Essayes sous Firefox / IE et Chrome si possible.
        Effectue la combinaison de touches CTRL+F5 avant.
        0
        1. J'ai internet explorer, mozilla et chrome et ça ne fonctionne pas sur les trois
          0
          1. J'ai fait un ctrl+F et il n'y a pas cette ligne dans le code.
            0
            1. Essayes avant la ligne qui contient
              return $this->pdf->Output($name, $dest);
              (j'ai vérifié, celle ci existe bien :-))
              0
          2. Merci à chacun de vous.

            ça fonctionne bien.

            PS: jetez un oeil sur cette discussion au cas où je serais pommée par la suite SVP :)
            0
            1. Bonjour,

              Peux tu me donner ta version de PHP ?
              -1
              1. Peux tu essayer de remplacer
                ?>
                
                <table>
                <tr>
                <td>Salut</td>
                </tr>
                </table>
                
                <?php 

                par
                $content = "
                <table>
                <tr>
                <td>Salut</td>
                </tr>
                </table>";

                -1
                1. Peux tu faire un essai sur un fichier test.php qui contiendrait le code original d'un sample de la classe ?

                  Dans ton fichier test.php, tu mets le code suivant :

                  <?php
                      $content = "
                  <page>
                      <h1>Exemple d'utilisation</h1>
                      <br>
                      Ceci est un <b>exemple d'utilisation</b>
                      de <a href='http://html2pdf.fr/'>HTML2PDF</a>.<br>
                  </page>";
                  
                      require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php');
                      $html2pdf = new HTML2PDF('P','A4','fr');
                      $html2pdf->WriteHTML($content); // in $content you put your content to have in pdf
                      $html2pdf->Output('exemple.pdf');
                  ?> 


                  Tu fais pointer ton navigateur vers le fichier http://localhost/test.php et dis moi ce que ça donne.
                  -1
                  1. Dans le fichier html2pdf.class.php, peux rechercher la ligne
                    return $this->pdf_renderer->render($this->filename, $display); 
                    et y ajouter avant
                    ob_end_clean(); 
                    sur une nouvelle ligne ?
                    -1
                    1. Modifier la classe html2pdf n'est pas conseillé à mon avis, à moins d'être sur que le problème vient de là. Cette classe est utilisée par des milliers d'utilisateur sans aucun problème.

                      On peut toujours essayer.
                      0
                    2. Oui, c'est juste pour tester, ça fait partit des solutions que j'ai pu trouver sur le net, certains CMS qui utilisent cette classe pour générer des PDF et qui ont la même erreur.
                      0