Der Martin: PHP: Seite ausgeben und Datei-Download gleichzeitig

Beitrag lesen

Hallo,

dein Lösungsvorschlag ist in mehreren Punkten kritikwürdig.

Zum Beispiel: Warum speicherst du das XML-Dokument überhaupt als Datei? Wenn schon, kannst du den XML-String auch direkt an den Browser senden.

Aber viel problematischer ist das hier:

// Header für Dateidownload senden
header('Content-Type: application/xml');
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header('Content-Length: ' . filesize($file_name));

// XML-Datei an den Client senden
readfile($file_name);

// Bestätigungsseite anzeigen
echo '<html>
        <head>
            <title>Bestätigung</title>
        </head>
        <body>
            <h1>XML-Datei erfolgreich generiert und heruntergeladen!</h1>
        </body>
    </html>';

// XML-Datei vom Server löschen
unlink($file_name);
?>

Per HTTP-Header kündigst du dem Client an: Hier kommt jetzt ein XML-Dokument mit einer Länge von soundsoviel Bytes. Das wird er dann auch empfangen und womöglich zum Speichern anbieten.

Dass danach noch ein Stück HTML kommt, wird er aber ignorieren. Denn erstens ist die angekündigte Nutzdatenlänge erreicht, weiterlesen wäre also Unsinn; zweitens würde, selbst wenn die Länge entsprechend korrigiert wird, das Stück HTML noch dem XML-Dokument zugeschlagen.

Einen schönen Tag noch
 Martin

--
Im Englischen hat eine Katze neun Leben. Im Deutschen vielleicht auch, aber nach Abzug der Steuern bleiben nur noch sieben übrig.