PHP文件下载

PHP文件下载,php,Php,我上传了一个培训的多个文件,并根据培训ID列出了这些文件。如何下载一个与培训ID关联的文件,其中包含多个文件? 我有.txt、.pdf、.docx和.pptx文件类型。 这是我尝试过的PHP文件 <?php $id= $_GET['id']; $mysqli = new mysqli("localhost","root","pass","test"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL

我上传了一个培训的多个文件,并根据培训ID列出了这些文件。如何下载一个与培训ID关联的文件,其中包含多个文件? 我有.txt、.pdf、.docx和.pptx文件类型。 这是我尝试过的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>";
}
?>

在我拥有多个许可证数据的一个站点上,我要做的是将所有必需的许可证文件复制到一个临时文件夹,创建一个包含tham all的zip存档,然后将zip文件推送到最终用户并删除临时文件数据


这有两个好处:单个文件下载,压缩文件下载量减少,缓解带宽压力。在编译zip和磁盘IO以移动文件时,处理器的使用也有一些缺点。然而,我认为,在现代硬件上,IO/CPU在除了最大的站点之外的所有站点上几乎都是不相关的。

您应该发送一个内容类型头,如下所示:


脱离主题,但是如果您使用的是
mysqli
(这是一件非常好的事情),那么您应该使用prepared语句和变量绑定,而不是将信息填充到SQL查询中。对于下载内容,尝试添加
内容类型:application/octet-stream
标题。
header("Content-Type: plain/text");