Ich weiß, wie man den Download auftreten, wenn der Download passiert, hängt es den HTML-Code von der Webseite, die den Download verursacht. Wie filtere ich den HTML-Code?erzwingt einen Datei-Download mit PHP
Antwort
Ich verstehe, dass Sie versuchen, einige Strom für den Download von PHP-Seite auszugeben?
Wenn dies der Fall ist, dann geben Sie diesen Inhalt nicht von der Seite aus, die HTML enthält, sondern umleiten, um die php-Seite zu trennen, die nur den Download-Stream mit Kopfzeilen ausgibt.
Dies ist wie eine halbe Antwort. Es ist nur über "Wenn Sie es herunterladen möchten, zwingen Sie es zum Download." – Jake
Wenn ich Sie richtig verstehe, ist es ein häufiges Problem. Ich löste es, indem am Anfang meiner index.php mit ob_start (Start/root/entry-Datei), bevor irgendeine Ausgabe occures und für den Download ich folgendes tun:
ob_end_clean();
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". filesize("thefileinquestion").";");
header("Content-disposition: attachment; filename=thefileinquestion");
$fp = fopen(thefileinquestion, "r");
while(!feof($fp)){
$buffer = fread($fp, 1024);
echo $buffer;
flush();
}
fclose($fp);
die();
aktualisieren
Die ob_start
Befehl puffert jeden Ausgang (zB über echo, printf) und verhindert, dass vor dem eigentlichen Download etwas an den Benutzer gesendet wird. Die ob_end_clean
stoppt dann dieses Verhalten und ermöglicht die direkte Ausgabe wieder. HTH.
Sie können alles von '$ fp = ...' zu 'fclose()' mit einem Aufruf von readfile() ersetzen. –
Das sieht wie eine sehr saubere Alternative zu meinem aufgeblähten Code aus. Werde diesen in Zukunft nutzen! DANKE! – merkuro
1) Senden Sie den tatsächlichen Medientyp, nicht "application/octet-stream". 2) Es gibt kein Header-Feld "Content-Transfer-Encoding" in HTTP. Ja wirklich. –
Stellen Sie sicher, dass Sie nach Abschluss des Dateistreams keine zusätzlichen Daten ausgeben. Verwenden Sie einen Aufruf von exit(), um die Ausführung der Seite nach Abschluss des Dateistreams zu beenden. Alle Zeichen nach einem schließenden '?>' - Tag (z. B. einem Zeilenumbruch) können Download-Probleme verursachen.
Das Verschieben des Download-Skripts in eine eigene Datei sollte das Finden von Problemen erleichtern, da es nur eine Sache macht. Um zu vermeiden, dass endgültige Zeilenumbrüche ausgegeben werden, können Sie auch in diesem Fall das abschließende "?>" - Tag am Ende Ihres Skripts weglassen.
Können Sie klären, idealerweise mit Beispielcode? Es ist nicht klar, was Sie meinen "Ursachen der Download" –