【发布时间】:2016-07-07 08:54:07
【问题描述】:
我浏览了有关 Stack Overflow 的所有文章,但无法解决我的问题。我正在使用以下代码:
$file = $_GET['url'];
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
上面提到的代码是从根目录正上方下载文件,是的,它正在下载 PDF 文件,但文件只有 1KB 大小,而不是原始大小。 $_GET['url'] 在其中接收../dir/dir/filename.pdf。文件名也是其中的空格。出于安全原因,我不能共享文件名。
请让我知道我哪里出错了。
【问题讨论】:
-
为了进一步扩展,我还用 application/pdf 替换了 application/octet-stream。
-
问题是“PHP(如何)强制下载损坏的 PDF 文件”,但在你的问题中你说:“上面提到的代码正在下载文件” - 那么问题是什么?跨度>
-
上面的代码正在下载一个损坏的文件。当我检查 PDF 文件的大小时,它是 1KB。抱歉标题令人困惑。
-
在第一行之后,添加这段代码并重试
echo '<pre>IS FILE: ' . (is_file($file) ? 'YES!' : 'NO :(') . '</pre>';- 你看到了什么? -
这是你的问题 - 你必须提供一个有效的文件名。