2013-01-23 105 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");