Die PHP-Dokumentation liefert ein nettes Beispiel:
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
BEARBEITEN (Antwort auf Kommentar, Erklärung)
header('Content-Description: File Transfer');
Nicht im Browser anzeigen, sondern die Datei übertragen.
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
Datei ist eine Binärdatei.
Browser laden im Allgemeinen Binärdateien herunter, es sei denn, sie können sie anzeigen.
header('Content-Disposition: attachment; filename='.basename($file));
Sorgen Sie dafür, dass der Download-Dialog den richtigen Dateinamen anzeigt.
Hinweis:Sie können einen beliebigen Dateinamen verwenden.
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
Die Datei sollte nicht vom Browser zwischengespeichert werden.
Cache kann bei dynamischen Inhalten zu Problemen führen.
header('Content-Length: ' . filesize($file));
Senden Sie die korrekte Dateigröße an den Browser,
sonst kann der Browser die Übertragungszeit nicht abschätzen.
ob_clean();
flush();
Stellen Sie sicher, dass die Header an den Browser gesendet werden, bevor der Download beginnt.
readfile($file);
Senden Sie die Datei an den Browser.
exit;
Fertig :)