【发布时间】:2019-07-10 08:15:05
【问题描述】:
我有这个代码来强制下载,$file 是现有 .jpg、.png 或 .pdf 文件的 url(我确定它存在)
<?php
$file = $_REQUEST['file'];
$file_extension = end(explode('.', $file));
$file_name = end(explode('/', $file));
switch ($file_extension) {
case 'jpg':
header('Content-Type: image/jpeg');
header('Content-Disposition: attachment; filename='.$file_name);
header('Pragma: no-cache');
readfile($file);
break;
case 'png':
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename='.$file_name);
header('Pragma: no-cache');
readfile($file);
break;
case 'pdf':
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename='.$file_name);
header('Pragma: no-cache');
readfile($file);
break;
}
但它正在下载一个空 (0KB) 文件(名称正确)
有没有想过会发生什么?
【问题讨论】:
-
您确定
$file是现有的吗?如:可从您当前的位置访问? IE。如果$file是dir/file.jpg,但您的脚本在/something/x/中运行,而目录dir在/something/x/y/dir中,则路径将无法解析。您可以通过var_dump(file_exists($file)); exit;快速了解。 -
是的,正如我在问题中提到的,我确保它们存在(这是一个工作图像/pdf URL)
-
如果你尝试 var_dump(file_get_contents($file)) 你可以得到内容吗?
-
@FrancescoMineo 这很奇怪.. 它打印出
bool(false) -
为什么不将请求重定向到 URI?
readfile()主要不是为了读取远程文件,它只是一个奖励。
标签: php file download readfile