2009-06-15 4 views
0

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

+0

Können Sie klären, idealerweise mit Beispielcode? Es ist nicht klar, was Sie meinen "Ursachen der Download" –

Antwort

1

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.

+0

Dies ist wie eine halbe Antwort. Es ist nur über "Wenn Sie es herunterladen möchten, zwingen Sie es zum Download." – Jake

4

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.

+3

Sie können alles von '$ fp = ...' zu 'fclose()' mit einem Aufruf von readfile() ersetzen. –

+0

Das sieht wie eine sehr saubere Alternative zu meinem aufgeblähten Code aus. Werde diesen in Zukunft nutzen! DANKE! – merkuro

+1

1) Senden Sie den tatsächlichen Medientyp, nicht "application/octet-stream". 2) Es gibt kein Header-Feld "Content-Transfer-Encoding" in HTTP. Ja wirklich. –

1

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.