Kohanaモデル内からブラウザーにファイルを送信しようとしていますが、Content-Lengthヘッダーを追加するとすぐに、ファイルのダウンロードが開始されません。
問題は、コハナがすでにバッファを出力していることのようです。ただし、スクリプトの先頭にあるob_cleanはこれを助けません。また、ob_get_length()をContent-Lengthに追加しても、0が返されるだけなので役に立ちません。getFileSize()関数は正しい数値を返します。Kohanaの外部でスクリプトを実行すると、機能します。
exit()がまだすべてのデストラクタを呼び出しており、後でコハナによって何かが出力された可能性があることを読みましたが、正確には何がわかりません。
誰かがここで私を助けてくれることを願っています...
これは私が使用しているコードの一部です:
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();
}