PHP下载脚本与mod-xsendfile实现

时间:2015-01-18 23:07:35

标签: php download dreamhost x-sendfile

我目前正在使用this PHP下载脚本从我的网站上获取大型文件(1GB +)的服务列表,但在投诉下载损坏后我研究并找到了一个更好看的替代方案:mod_xsendfile。我的托管是使用Dreamhost,他们已经在我的域上启用了xsendfile。我使用来自作者网站的代码对其进行了测试,结果如下:

<?php 
header("X-Sendfile: /home/username/website.com/test.zip");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=test.zip");
exit;
?>

但我希望将所有下载内容放在一个目录中并链接到文件,就像我使用媒体部门的脚本一样:

https://website.com/download.php?file=test.zip

我搜索了大多数用x-sendfile标记的问题,但没有找到任何有用的信息。我不能编写PHP代码,但知道足够配置脚本以使它们正常工作。有没有人知道可以做到这一点的脚本还是可以帮助我?

由于

1 个答案:

答案 0 :(得分:0)

可以这样做:

<?php 
$path = realpath("/home/username/website.com/" . $_GET["file"]);
if (strpos($path, "/home/username/website.com/") !== 0) {
    header("Status: 404 Not Found");
    die();
}
header("X-Sendfile: $path");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$_GET["file"]);

这也可以确保用户无法从/home/username/website.com/的任何其他目录中获取文件,例如数据库备份或您不想下载的其他内容。