强制下载在PHP中

时间:2012-02-19 15:01:45

标签: php header download

我正在尝试创建强制下载页面,以防止浏览器打开应下载的文件。问题是下载的文件有0个字节,因此无法使用。我的代码出了什么问题?

$file = "http://gh0stsec.zxq.net/background1.jpg";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($file));
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
header("Content-Description: File Transfer");
@readfile($file);
exit();

2 个答案:

答案 0 :(得分:3)

检查:

header("Content-Length: ".filesize($filename));

我认为应该是:

header("Content-Length: ".filesize($file));

答案 1 :(得分:1)

我认为你会遇到filesize的问题,因为它不是本地文件(如果是,请使用相对路径)。 Content-Type标题对我来说总是有点奇怪,但在我读到的所有示例中,force-download始终是一个后备。无论如何,我这样做了它似乎工作:

<?php
$file = file_get_contents('http://gh0stsec.zxq.net/background1.jpg');

if ($file) 
{

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=background1.jpg');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . strlen($file));
    ob_clean();
    flush();

    echo $file;
} 
else   
{
    echo 'error';
}
?>