Ich versuche, eine MP4-Datei herunterladen. (ca. 1,3 GB Größe). Ich verwende folgende: Force-Download, von PHP-Datei
<?php
$path = "video.mp4";
header('Accept-Ranges: bytes'); // For download resume
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.basename($path).'"');
header('Content-Length: ' . filesize($path)); // File size
header('Content-Transfer-Encoding: binary'); // For Gecko browsers mainly
header('Content-Type: application/octet-stream');
header('Expires: 0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Pragma: no-cache');
ob_clean();
flush();
readfile($path);
ich meine PHP-Datei öffnen und Firefox öffnet sich mit dem „speichern möchten“ -Menü. Größe sieht richtig aus. Ich drücke Speichern unter auf meinem Desktop. Die zuletzt heruntergeladene Datei wird in einer zufälligen Größe von etwa 400 MB (330, 463 und 440) aufgelistet.
Antwort-Header sind:
Connection: Keep-Alive
Content-Disposition: attachment; filename="//www.frederikspang.dk/elevgallavideo.mp4"
Content-Length: 1422778850
Content-Type: video/mp4
Date: Sun, 30 Jun 2013 22:12:30 GMT
Keep-Alive: timeout=10, max=50
Pragma: public
Server: Apache
content-transfer-encoding: binary
Sie könnten ein Ausführungszeitlimit erreichen. Stoppt der Download immer nach der gleichen Zeit? –
Wiederaufladbare Datei-Downloads benötigen viel mehr Code als das; Sie sollten also "Accept-Ranges" entfernen. Siehe: http://stackoverflow.com/questions/157318/resumable-downloads-when-using-php-to-send-the-file –
Verwenden Sie tatsächlich die Pufferung von Ausgaben? Wenn nicht, brauchen Sie wahrscheinlich ob_clean() und flush() nicht, da der Befehl readfile die Daten direkt an den Client ausgibt. – dethtron5000