PHP 使用 mod-xsendfile 实现下载脚本
PHP Download Script with mod-xsendfile Implementation
我目前正在使用 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;
?>
但我想将所有下载内容都放在一个目录中,然后 link 到文件,就像我使用媒体部门的脚本一样:
https://website.com/download.php?file=test.zip
我搜索了大部分标有 x-sendfile 的问题,但没有找到任何有用的信息。我不会编写 PHP 代码,但知道足以配置脚本以使其正常工作。有谁知道可以执行此操作或可以帮助我的脚本吗?
谢谢
可以这样做:
<?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/
之后的任何其他目录获取文件,例如数据库备份或其他您不想下载的内容。
我目前正在使用 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;
?>
但我想将所有下载内容都放在一个目录中,然后 link 到文件,就像我使用媒体部门的脚本一样:
https://website.com/download.php?file=test.zip
我搜索了大部分标有 x-sendfile 的问题,但没有找到任何有用的信息。我不会编写 PHP 代码,但知道足以配置脚本以使其正常工作。有谁知道可以执行此操作或可以帮助我的脚本吗?
谢谢
可以这样做:
<?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/
之后的任何其他目录获取文件,例如数据库备份或其他您不想下载的内容。