2017-04-20 8 views
1

レポートを生成してアップロードしようとしています。問題は、ファイルを生成する関数がreadfile()で終わったときに、関数呼び出しの前にob_start()を入れても、ファイルをダウンロードするだけです。だからなぜob_startがそれを捕まえていないのか分かりません。Ob_startが出力ファイルをキャッチしない

問題はここに

  1. 私はその後、私は私が $content = ob_get_contents();を入れて、前の関数呼び出しの後、この

    header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document'); header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($fileName . '.' . $this->_extension)); readfile($fileName . '.' . $this->_extension);

  2. のようなファイルを出力する関数を呼び出すob_start()

  3. を呼ぶべきです

と4 ob_end_clen()

私はreadfile()と機能は、バッファへの書き込みを開始しますが、代わりに、それは私はヘッダーが設定されているという事実を信じてダウンロード

+0

私たちのコードを表示するそれ以外のすべて私はこのようなものの複製であることがわかりますhttp://stackoverflow.com/questions/10938822/how-do-i-assign-content-from-readfile-into-a-variable – Scuzzy

+1

私はそれを少し編集しましたそうでなければ、hundreadsコード行はほとんどないからです。 – jemcaj

+0

バッファの内容をエコーし​​ないで、スクリプトの実行終了時に実際にダウンロードされた内容を確認しましたか?私の考えは、ヘッダーの競合が発生しているということです。 http://stackoverflow.com/questions/3111179/how-do-headers-work-with-output-buffering-in-php – Scuzzy

答えて

0

用のファイルを出力することを期待します出力バッファに取り込まれていないので、特に、Content-Disposition: attachmentがレスポンスを強制ダウンロードに設定しているため、キャンセルする必要がある可能性があります。

http://www.php.net/manual/en/function.ob-start.php

この機能

は出力のバッファリングをオンにします。出力バッファリングがアクティブな間は、出力はスクリプト (ヘッダー以外)から送信されず、出力は内部バッファに格納されます。したがって

機能を設定した場合:

header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document'); 
header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"'); 

あなたはつまり、あなたが出力バッファリングキャプチャを終了した後、それを相殺実行する必要があります。

header('Content-Type: text/html'); 
header('Content-Disposition: inline'); 
関連する問題