2

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();
}
4

3 に答える 3

4

Kohana を使用してファイルを送信するには、もっと簡単な方法があります。Kohana 2.xを使用している場合は、次のようになります...

download::force('./application/downloads/file.txt');

ドキュメンテーション

Kohana 3.xを使用している場合、次のように実行されます...

$this->request->send_file('./application/downloads/file.txt');

ドキュメンテーション

于 2010-05-27T01:06:02.673 に答える
0

3.1以降では、使用

Request::current()->response()->send_file(FILENAME);

掘り下げたので、これが誰かの助けになることを願っています

ドキュメンテーション

于 2012-05-04T18:50:01.910 に答える
0

Kohana::close_buffers(FALSE) を呼び出して、Kohana の出力バッファをクリアする必要があることがわかりました。長い検索でしたが、今では機能しています。

于 2010-04-05T19:44:06.217 に答える