Zum Inhalt springen

PHP Funktion exit() verhindert Eintrag in Datenbank?!

Erstellt am 5. Juli 2011 · 3 Antworten · letzte Antwort am 5. Juli 2011

Tags: PHP, PDF, Frage

Unbekannter Benutzer ·

Hi,

ich weiß, dass exit() die Ausführung eines PHP Scripts unterbricht, jedoch versteh ich den Ablauf nicht und ich finde keine Alternative. Vielleicht habt ihr einen Rat für mich.

Aus einem Controller wird eine Funktion zur PDF-Generierung (FPDF) aufgerufen. Diese PDF wird auf dem Server gespeichert und anschließend via header Anweisung zum Download angeboten. Im gleichen Zuge soll ein Eintrag in die Datenbank geschrieben werden.

Am Ende des PDF Scripts steht exit(). Wenn ich die Funktion der PDF Generierung aufrufe, dann wird die PDF erstellt und heruntergeladen, aber der Datenbankeintrag wird nicht erstellt.

Wenn ich exit() auskommentiere, eine PDF generiere und nach dem Download der PDF einen Link auf der Seite anklicke, dann wird der Quelltext der Seite ausgegeben. Ich hab ein Screenshot davon angehängt.

Die PDF Generierung ist eine Service-Klasse. Ganz am Ende stehen folgende header Anweisungen und der exit() Befehl:

<?php
header("Content-Type: application/pdf" );
header("Content-Length: ".filesize($file));
header('Content-Disposition: attachment; filename="'.$downloadName.'"');
@readfile($file);
exit();
?>

Was kann ich da machen?

Vielen Dank für eure Hilfe.

ausgabe.jpg

Eydamos ·

Ich würde das exit() in dem Downloadscript auskommentieren und es im Controller nach dem Datenbankeintrag einfügen.

Sollte dies nicht klappen mach doch einfach erst den Datenbank eintrag und gib danach die Datei zum Download raus.

Unbekannter Benutzer ·

Hi,

ja das hab ich alles schon versucht aber kein Erfolg bisher gehabt 🙁

Entweder erhalte ich diese komische Ausgabe im Browser oder der DB Eintrag wird nicht erstellt.

Gibts eine andere Möglichkeit, dem Browser wieder "normale" header Anweisungen mitzugeben?

Unbekannter Benutzer ·

Ok, ich bin ein bisschen weiter gekommen.

Ich hab die PDF Generierung in eine eigene Action-Funktion ausgelagert und rufe diese per redirect() auf. Das fuktioniert aber wirklich sauber kommt mir das nicht vor.

Geht das auch irgendwie besser?