Andreas Korthaus: Datei erstellen -> danach zum Download anbieten

Beitrag lesen

Hi Tom!

Aber es gibt ja zum Glück noch dit guten alten Framesets.
So ein Frameset kannst Du dem Client schicken, nachdem Du auf dem Server die Generierung des PDF gestartet hast und eine Kontrolldatei schreiben lässt, mit dem Inhalts-Prozentsatz.

  1. HTML-Datei erzeugen, mit dem Inhaltsbalken  0% und einem kleinen Text.
  2. PHP-Instanz mittels Exec() und php-cgi/cli in den Hintergrund stellen, die das PDF erzeugt
       und die Kontrolldatei (zu 1.) immer auf den neuesten Stand bringt
  3. Frameset an den Client schicken, dass in einem Teil das PDF anfordert und im anderen Teil
       die Kontrolldatei mittels JavaScript immer wieder anfordert.

Ich weiß nicht ob ich da jetzt richtig verstanden habe, aber Du kannst aus einem PHP-Script heraus nicht einfach einen Hintergrundprozess anstoßen und das Script beenden bevor der Prozess zu Ende gelaufen ist. Wenn Du exec() ausführst, wartet das Script so lange, bis der per exec() gestartete Prozess beendet wird. Und wenn Du es mit irgendwelchen Tricks doch schaffst, wird spätestens beim Trennen der TCP-Verbindung auch der per exec() oder sonstwie gestartete Prozess abgebrochen. Du kannst also in dem Fenster, das den Request sendet nicht mit einem Frameset antworten, das bringt jedenfalls nichts. Man kann höchstens auf der Seite mit dem Link, der den Request auslöst schon Frames verwenden, wenn der Link zum Generieren des PDFs in einem anderen Frame liegt als die angezeigte Meldung bzw. header() / erzeugter Download-Link. Dann braucht man auch nicht unbedingt flush().

Bliebe noch die Überlegung, was man einbauen muss ins Frameset, für die Leute, die kein JavaScript unterstützen oder diejenigen die keine Frames können...

Ohne Javascript geht das nicht per "bitte warten", da muss man dann halt ohne Meldung warten.

Grüße
Andreas