In PHP dem Browser mitteilen, dass sich die Datei geändert hat



  • Hallo,

    ich entwerfe im Speicher ein PDF (mit PDFLib) und dieses wird dann an den Browser geschickt, so dass er es öffnet (oder zumindest den Benutzer fragt, wohin es gespeichert werden soll).

    /* Inhalt der Datei PDF.php */
    $buffer = PDF_get_buffer($pdf); 
    
    header("Content-type: application/pdf"); 
    header("Content-Length: ".strlen($buffer)); 
    header("Content-Disposition: inline; filename=Table.pdf");
    

    Das klappt soweit auch, der Browser empfängt die Datei "Table.pdf".
    Nun soll der Inhalt des PDFs aber dynamisch sein.Sei es, dass ich die Uhrzeit oben reinschreiben möchte. Drückt man nun den Aktualisieren-Button des Browsers(Internet Explorer) oder tippt die Adresse neu ein, öffnet IE die Datei aus dem Cache, da er nicht weiß, dass sie sich geändert hat. Nur wenn ich ihn schließe und neu starte, klappt es. Ich möchte gerne, dass der Dateiname gleich bleibt.
    Wie kann ich dem Browser sagen, dass er die Datei neu zu laden hat?



  • Das ist eine Einstellung im Browser. Da kann man angeben in welchen Fällen die Datei vom Cache verwendet werden soll.



  • Dann sag dem Browser doch, das er die Seite nicht cachen soll. Ich weiss aber nicht, ob er das dann auf den Download/das PDF-File bezieht..

    Header('Cache-Control: no-cache');
      Header('Pragma: no-cache');
    


  • AJ: Es wäre schön, wenn das Browserunabhängig wär.Das PDF soll ja jeder Besucher empfangen können.

    Tow-B.de:
    Ja, leider bezieht er das auf die .PHP Datei.Und in ein PDF kann man es ja nicht einbetten, ohne es zu korrumpieren.
    Es ist sowieso schwer zu sagen, was eigentlich gecached wird.
    Weil geladen wird ja offiziell die *.php Datei, oder?
    Und die wird ja sozusagen vom Webserver inhaltlich zu einem PDF gemacht, und dann erhält der Browser ein PDF, obwohl er eine Datei mit der Endung *.php lädt.
    Ganzschön verworren.
    Was anderes: Gibt es vielleicht irgendwo eine ausführliche Referenz über die möglichen Header-Statements? Das PHP-Manual ist da sehr knapp und in SelfHTML sind diese Informationen sehr verstreut.



  • http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    bezieht sich aber natürlich alles nur auf HTML, das wird dann keinen Einfluss auf dein PDF haben..

    mfg
    tobi


  • Mod

    wir haben deshalb manchmal zufallszahlen in der URL - damit lassen sich alle Browser täuschen.

    Die Frage ist lediglich: kann der User mit einem
    Table-06-07-2004-14:23.pdf
    leben?

    Wenn ja - dann hast du das Problem gelöst, wenn nicht, dann hilft nur jeden CacheControl Header zu senden und hoffen, dass möglichst viele Browser es aktzeptieren...



  • Die Sache mit den Dateinamen kam mir auch in den Sinn, ich fand es aber unschön.
    Ich dachte nur, es müsste doch irgendwo so eine Art "touch"-Befehl geben, der das File als geändert markiert.(Auch wenn es im Speicher erstellt wird.)

    Hier geht es übrigens:

    www.vide.gatech.edu/pdflib/pdfclock.php



  • Danke, ich habs!

    Habe gerade nochmal die User-Comments im PHP-Manual durchgestöbert und das hier entdeckt:

    header("Cache-Control: ");// leave blank to avoid IE errors
      header("Pragma: ");// leave blank to avoid IE errors
    

    Also Spaßensweise mal reinkopiert und jetzt geht es 🙂
    Scheint wohl doch eine IE Macke gewesen zu sein 🙄


Anmelden zum Antworten