Ankündigung

Einklappen
Keine Ankündigung bisher.

Seltsames PDF Stream Problem / FPDF

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Seltsames PDF Stream Problem / FPDF

    Hallo Forum,
    ich habe ein seltsames Problem und kann mir die Ursache einfach nicht erklären.
    In meinem Script wird per FPDF eine dynamische PDF Datei mit dem Parameter "F" erzeugt, also auf dem Server abgelegt. Später kann der User sich diese per Download Button abholen. Das funktionierte absolut reibungslos, bis ich eine Änderung in der Generierung des PDF vorgenommen habe (einige Abzweigungen per IF / ElseIF / Else)
    Seitdem ist das PDF im Serververzeichnis so wie es sein soll, aber der Datenstream an den Client ist "verstümmelt" und kann nicht gelesen werden.
    Ursache: Der HTML Inhalt der Seite wird neuerdings mitgesendet.

    Folgender Code soll die Datei senden, davor und dahinter ist HTML mit
    ob_start() und ob_end_flush()

    PHP-Code:
    <php
    header
    ('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: no-cache');
    header("Content-Type : application/pdf");
    header("Content-Disposition: attachment; filename=Meine_Rechnung.pdf");
    $regex_int ='/[^0-9]/';
    $which preg_replace ($regex_int,'',$_POST['file']); 
    $target_file "rechnungen/Rechnung_Nr".$which.".pdf";
    $connect_file fopen($target_file'r');
    $file_stream fread($connect_filefilesize($target_file));
    fclose($connect_file);
    echo 
    $file_stream;
    ?> 
    Ich nehme mal an das mein Code schlecht ist und vorher eher zufällig funktioniert hat. Habe mit den Befehlen ob_clean(), _flush() usw herumexperimentiert, aber das gibt nur Header Fehlermeldungen.

    Schonmal Danke fürs lesen

  • #2
    Folgender Code soll die Datei senden, davor und dahinter ist HTML mit
    ob_start() und ob_end_flush()
    Das Output-buffering dient nur dazu, Ausgaben vorziehen zu können und nachträglich Header zu setzen - es wird trotzdem alles gesendet, was im Puffer steht. Das heisst, wenn du einen HTML/PDF Mix in den Outputbuffer schreibst, wird dieser auch so gesendet.

    Der Download muss standalone sein - es darf ausschliesslich die Datei gesendet werden, nix anderes.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      , bis ich eine Änderung in der Generierung des PDF vorgenommen habe (einige Abzweigungen per IF / ElseIF / Else)
      Wennd er gesamte Code so geschrieben ist wie deiner hast du wohl ne If-Gekillt die das HTML nicht ausgeben lässt.

      Dein Codestück jedenfalls enthält nur den Part zum Auslesen de sPDF und ist korrekt. Woher sollen wir wissen wo das Problem liegt wenn aber vorher/hinterher HTML ausgegeben wird und das Problem definitiv am HTML liegt?
      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

      Kommentar


      • #4
        Hallo Thil,

        bei PHP Scripten, die Binärstreams wie PDF, JPG, .. erzeugen, muss sichergestellt sein, dass kein Zeichen ausgegeben wird, welches nicht zu dem gewünschten Stream gehört.
        Ich würde immer das PHP-Endtag weglassen, damit gewährleistet ist, dass sich dahinter nicht doch noch ein Whitespace befindet. Also, weg mit dem ?> Tag.

        Kommentar


        • #5
          Vielen Dank euch allen, habe die Sache mit der Pufferung völlig falsch verstanden, was wohl daran lag, dass es vorher aus irgendeinem Grund lief.

          Hab den Puffer rausgeschmissen und das Senden der Datei vom Rest entkoppelt, läuft wieder alles rund

          Kommentar

          Lädt...
          X