保护下载

时间:2011-03-24 00:33:52

标签: php download x-sendfile

我刚刚在下面测试了这个下载脚本。下载工作正常,但下载的zip或rar存档总是损坏,无法打开。我在本地开发服务器以及我的主机帐户上测试过它。

我只是想了解它是如何工作的,但我并不理解它。

感谢所有帮助!

测试代码:

<?php
$is_logged_in = 1;
$path_to_file = 'downloads/tes.zip';
$file_name = 'test.zip';

if ($is_logged_in == 1)
{
    header("X-Sendfile: $path_to_file");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$file_name\"");
    exit;
}
?>

<h1>Permission denied</h1>
<p>Please Login first!</p>

2 个答案:

答案 0 :(得分:1)

您最有可能在文件中附加/附加了某些内容。尝试使用buffering并清理。

<?php
ob_start();
$is_logged_in = 1;
$path_to_file = 'downloads/tes.zip';
$file_name = 'test.zip';

if ($is_logged_in == 1)
{
    $fp = fopen($path_to_file, 'rb');

    if(is_resource($fp))
    {
            ob_clean();
            header("Content-Type: application/force-download");
            header("Content-Length: " . filesize($path_to_file));
            header("Cache-Control: max_age=0");
            header("Content-Disposition: attachment; filename=\"$file_name\"");
            header("Pragma: public");
            fpassthru($fp);
            die;
    }
} else {
    echo "<h1>Permission denied</h1>";
    echo "<p>Please Login first!</p>";
}

答案 1 :(得分:0)

您是否已将网络服务器(特别是Apache)配置为加载mod_xsendfile?如果没有安装该模块,您的脚本基本上什么都不做。