我使用以下代码下载PDF ....
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="NewName.pdf"');
readfile($root_path.'/full-tile-book.pdf');
这是一个13 MB的文件,只下载像130k,当然无法打开。如何调试问题所在?我的pdf路径是正确的。
答案 0 :(得分:1)
也许你遇到了内存/文件大小错误?我在过去使用readfile转储大文件时遇到了问题。除了设置Content-Length标头之外,我建议使用fpassthru()
,因为它不会将文件读入缓冲区,只是转储它。
set_time_limit(0); // disable timeout
$file = $root_path.'/full-tile-book.pdf';
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="NewName.pdf"');
header('Content-Length: ' . filesize($file));
session_write_close(); // remove this line if sessions are not active
$f = fopen($file, 'rb');
fpassthru($f);
fclose($f);
exit;
编辑:如果您正在使用任何sessions_code,最好在启动文件转储过程之前结束会话。我已经更新了我的例子以反映这一点。
答案 1 :(得分:0)
我会添加一些项目。将文件名分配给$ file,然后尝试:
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
这将确保客户端期望正确的长度,并且输出缓冲区在两者之间很好地刷新。
答案 2 :(得分:0)
查看下载的文件可能在PHP中使用了错误的地址
您可以按照本教程在PHP中下载文件。
HTML标头必须先发送 输出发送到浏览器。 PHP 使用header函数传递raw HTML标头。对于这个例子,我们是 从URL获取文件名 www.yourdomain.com/download.php?file=download.zip。
<?
$dir="/path/to/file/";
if (isset($_REQUEST["file"])) {
$file=$dir.$_REQUEST["file"];
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file));
header("Content-disposition: attachment; filename="".basename($file).""");
readfile("$file");
} else {
echo "No file selected";
}
?>
我们开始设置目录 要下载的文件是哪里 位于$ dir。一定不要使用 $目录。然后我们检查以确保一个 filename已在请求中指定。 如果指定了文件,那么我们设置 $ file到文件的路径和 文件名。现在准备工作了 完成了将文件发送到的时间 浏览器。
第一个标题语句告诉了 浏览器期待下载。下一个 两个头语句告诉浏览器 数据的格式和大小 该文件分别。最后一个标题 语句告诉浏览器名称 的文件。最后是readfile 语句将文件发送给 浏览器。