【发布时间】:2012-02-27 00:05:31
【问题描述】:
小脚本,用于根据获取字符串向用户发送两个 .pdf 文件之一:
if ($fileToSend == "bigone") {
$filename = "largefile.pdf";
$header = "application/pdf";
} else if ($fileToSend == "smallone") {
$filename = "smallfile.pdf";
$header = "application/pdf";
}
if (file_exists('d/' . $filename)){
header('Content-type: ' . $header);
header('Content-disposition: attachment; filename=' . $filename);
readfile('d/' . $filename);
} else {
echo('No good');
}
文件 d/smallfile.pdf 和 d/largefile.pdf 都存在。 smallfile.pdf 大约为 5 兆。 largefile.pdf 大约 25 兆。
sendFile.php?fileToSend=smallone 有效。
sendFile.php?fileToSend=bigone 不起作用;在FF中,它说
找不到文件 Firefox 在 [url]/sendFile.php?fileToSend=bigone 处找不到文件
没有文件名错误。
我试过了
- 添加flush();在读取文件之前;这会导致出现下载文件对话框,但随后会提供一个 0 字节的文件
- 添加flush();在读取文件之前,并添加 header('Content-Length: ' . filesize('d/' . $filename)); - 这工作成功,但需要近 2 分钟来处理(即,一旦我点击 URL,近 2 分钟没有任何反应,然后出现对话框,其中包含要正确下载的实际文件)。
任何帮助将不胜感激。 乔恩
【问题讨论】:
-
你试过增加 PHP 的内存限制吗?
-
否;有趣的想法。这会导致这种行为吗?我会问我的管理员。
-
如果允许,您也可以使用
ini_set自己执行此操作。ini_set('memory_limit', '128M');