2012-03-29 20 views
0

Alles, was ich brauche Hilfe beim Herunterladen einer Datei über die Header funktioniert gut, aber das Problem ist, dass die Datei in einem Ordner ist und ich verstehe nicht, wie Pfad für diese bestimmte Datei geben. Die Dateidownloads geben mir immer eine leere Datei. Meine grundlegende Sanario ist, dass ich einen Link (Bild) zum Download einer Datei auf der Seite genannt (documents.php), die mich auf die andere Seite mit dem Namen download.php.in dieser Seite Ich Header zum Herunterladen der angeklickten Datei wieDatei herunterladen über Header

ist dies ein Link (document.php)

<a href="download.php?title=<?=$arr['title']?> "><img src="images/xl_icn.jpg" alt="" width="19" height="20" /></a> 

dies Header (download.php)

header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); 

header("Content-Disposition: attachment; filename='".$_GET['title']."'"); 

if(isset($_SESSION)){ 
    header('Location: documents.php'); 
} 

und nachdem sie mich zurück in die documents.php Seite aber die Dateien senden Download die Ich möchte herunterladen, ist in Ordner Uploads/Dokumente und ich weiß nicht, wie diese Dateien herunterladen p geschnürt in Uploads/Dokumente.

+0

Ich würde vorschlagen, dass Sie dieses Skript verwenden http://www.zubrag.com/scripts/download.php – Kamal

Antwort

0

Sie haben einen guten Start ich Ihren Code ändern würde mehr wie die folgenden sein:

$path = $_SERVER['DOCUMENT_ROOT']."/uploads/documents/"; 
$fullPath = $path.$_GET['title']; 

if ($fd = fopen ($fullPath, "r")) { 
    $fsize = filesize($fullPath); 
    header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); 
    header("Content-Disposition: attachment; filename='".$_GET['title']."'"); 
    header("Content-length: $fsize"); 
    header("Cache-control: private"); 
    while(!feof($fd)) { 
    $buffer = fread($fd, 2048); 
    echo $buffer; 
    } 
} 
fclose ($fd); 

$ Pfad, den Sie für welchen Ordner aktualisieren würden Die if-Anweisung arbeitet die erforderlichen Dateiaufrufe und echos den Seiteninhalt in einem Pufferstil.

Dies kann weiter erweitert werden, um abhängig von Erweiterungen eine switch-Anweisung aufzunehmen, um die Content-Type-Deklaration zu ändern. Da Sie den Inhalt auf die Seite puffern, können Sie header("Location"); nicht aufrufen. Oder Sie bekommen "Header kann nicht gesendet werden, da der Seiteninhalt geladen wurde" aufgrund der Pufferung.

Ich würde vorschlagen, es in einem neuen Fenster oder einem iframe (eingewickelt in einem div und könnte versteckt werden) auf der Seite. Sie können es auch in die Datei document.php einfügen, anstatt eine separate Datei aufzurufen.

+0

so nett von Ihnen, lieber Bruder – user1210460

0

Sie können nicht von der Download-Seite zurück umleiten. download.php sollte nur tun

echo $binary_file_contents;

und Ausgang, kann es nicht Header umleiten senden.

Sie können es in einem iframe öffnen und auf diese Weise Sie die documents.php Seite nicht wirklich verlassen

Verwandte Themen