我有一个简单的问题。我正在寻找下载文件的功能。我找到了一个,但我的问题很小。
首先,这是一些功能代码:
header ('Content-type: ' . mime_content_type($file));
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
header ('Expires: '.gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y"))).' GMT');
header ('Accept-Ranges: bytes');
header ('Cache-control: no-cache, must-revalidate');
header ('Pragma: private');
为了测试我正在使用的功能:
$file = 'path/file.rar';
dowload_file($file);
它工作正常,文件正在下载。但是,如果我使用图像功能,例如:
$file = 'path/image.jpg';
download_file($file);
然后图像也会下载。但是我想让它被查看而不是下载。
如果我删除此行:
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
图像立即显示,但rar和zip文件已停止下载。
那么如何在不下载但是下载任何其他文件的情况下显示图像?我在localhost上测试,可能这是问题吗?
答案 0 :(得分:0)
如果Content-Disposition
标头设置为attachment
,则无论文件类型如何,都会强制下载。
如果您希望以不同方式处理图片,则必须在Content-Disposition
标题上添加条件,例如:
if (!preg_match('@\.(gif|jpe?g|png)$@', basename($file)) {
// this is *not* an image, do C-D: attachment header
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
} // otherwise do nothing
答案 1 :(得分:0)
您必须在可以在浏览器中查看并且应该下载的文件上添加条件语句。对于图像和xml文件,您可以提供不使用内容处置作为附件的条件。对于其他人包括它。
答案 2 :(得分:0)
您可以尝试根据文件类型进行切换。如果您采用文件的扩展名:
$ext = pathinfo($file, PATHINFO_EXTENSION);
然后您可以将图像列入白名单:
if($ext != 'gif' && $ext != 'jpg' && $ext != 'png' && $ext != 'jpeg')
{
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
}
或者,将您的下载列入白名单:
if($ext == 'rar')
{
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
}
答案 3 :(得分:0)
我在localhost上测试,可能这是问题吗?
不。不是localhost,但逻辑是你的问题。
如果要显示图像,请注意显示图像的功能,而不是下载文件。这是不同的任务。
实际上,要显示图像,您必须发送的唯一标题是正确的内容类型。