我目前正在使用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代码,但知道足够配置脚本以使它们正常工作。有没有人知道可以做到这一点的脚本还是可以帮助我?
由于
答案 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/
的任何其他目录中获取文件,例如数据库备份或您不想下载的其他内容。