2013-01-23 157 views
0

我上傳了多個文件進行培訓,並根據training_ID列出了它們。我如何下載與具有多個文件的training_id關聯的單個文件? 我有.txt,.pdf,.docx和.pptx文件類型。 這是我試過的PHP文件。PHP文件下載

<?php 
$id= $_GET['id']; 
$mysqli = new mysqli("localhost","root","pass","test"); 
if ($mysqli->connect_errno) 
{ 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 
$query = "SELECT Material_Name,Material_Data from Training_Material where  Training_Id='{$id}'"; 
$result = $mysqli->query($query); 
if($result) 
{ 
    $row = mysqli_fetch_assoc($result); 
    header("Content-Disposition: attachment; filename=". $row['Material_Name']);  
    echo $row['Material_Data']; 
    @mysqli_free_result($result); 
} 
else 
{ 
    echo "Error! Query failed: <pre>{$mysqli->error}</pre>"; 
} 
?> 

此文件沒有下載。

這裏DB中的Material_Data列包含使用file_get_contents方法得到的上傳文件的內容。我應該怎麼做才能使下載發生?

+1

題外話,但如果你使用'mysqli'(這是一個非常好的事情),你應該使用事先準備好的聲明和變量綁定而不是將信息填充到SQL查詢中。對於下載的東西,嘗試添加'Content-Type:application/octet-stream'頭。 – Passerby

回答

0

在我的網站,我有多個可用的許可數據我做的是所有必要的許可文件複製到一個臨時文件夾,創建一個包含艾德里安所有一個zip壓縮文件,然後將zip文件推送到最終用戶和刪除的內容之一臨時文件數據。

這有幾個好處單個文件下載,壓縮文件,以便少下載帶寬緩解壓力。還有一些處理器使用的缺點,用於編譯用於移動文件的zip和磁盤IO。不過,我決定在現代硬件上IO/CPU在除了最大的網站之外幾乎都是無用的。

0

您應發送Content-Type頭是這樣的:

header("Content-Type: plain/text");