我正在尝试创建强制下载页面,以防止浏览器打开应下载的文件。问题是下载的文件有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();
答案 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';
}
?>