我正在尝试从 Kohana 模型中将文件发送到浏览器,但是一旦我添加了 Content-Length 标头,该文件就不会立即开始下载。
现在问题似乎是 Kohana 已经在输出缓冲区了。脚本开头的 ob_clean 对此没有帮助。将 ob_get_length() 添加到 Content-Length 也无济于事,因为它只返回 0。getFileSize() 函数返回正确的数字:如果我在 Kohana 之外运行脚本,它就可以工作。
我读到 exit() 仍然调用所有析构函数,可能是 Kohana 之后输出了一些东西,但我无法找出究竟是什么。
希望有人可以在这里帮助我...
这是我正在使用的一段代码:
public function download() {
header("Expires: ".gmdate("D, d M Y H:i:s",time()+(3600*7))." GMT\n");
header("Content-Type: ".$this->getFileType()."\n");
header("Content-Transfer-Encoding: binary\n");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",$this->getCreateTime()) . " GMT\n");
header("Content-Length: ".($this->getFileSize()+ob_get_length()).";\n");
header('Content-Disposition: attachment; filename="'.basename($this->getFileName())."\"\n\n");
ob_end_flush();
readfile($this->getFilePath());
exit();
}