2009-08-07 8 views
1

Zend Framework MVCからファイルを提供する場合のベストプラクティスは何ですか?これらのファイルは、保護されているので、MVCから提供する必要があります。Zend Framework MVCのファイルを扱う場合

私はあなたがファイルを読んでそれをResponseオブジェクトに入れることができますが、これはファイル全体をメモリに読み込み、それを処理しているように思われると思います。今、私は通常の操作を行います。

header('Content-type: image/jpeg'); 
fpassthru(fopen($path, 'rb')); 
exit; 

しかし、私は、スクリプトの実行を停止していますので、これはまた、右のようではありません。助言がありますか?

答えて

1

exit();注意する必要があるのは、出力バッファリングレイヤー(gzip圧縮など)です。大きなファイルはそれらのバッファをかなり速く爆破する可能性があるので、それらを閉じてfopen/freadループで出力をチャンクすることが望ましいでしょう。

1

X-Sendfileヘッダーを使用できます。これはlighttpdと新しいバージョンのapacheでサポートされています。基本的に、Webサーバーはスクリプトの出力を指定したファイルに置き換えます。欠点は、ウェブサーバの設定に固有のものであるため、あなたがそれをサポートしていないホストにいる可能性があります。

+0

これはうれしいことですが、ここに私が頼りにしたくないサーバー構成には十分な問題があります。 – smack0007

1

CMSのようなチケットシステムに基づいてファイルを取得するための超簡単なスクリプトを構築することをお勧めします。これはDB-filename、一意のハッシュ、および超簡単なファイル再編集スクリプト(file.php ?hash = asd52ad3as1g5)。それはクエリからハッシュを取得し、それに基づいて実際のファイル名を取得し、fpassthruを使って書いたように出力にプッシュします。ハッシュはユニークで推測が難しい必要があります。

+0

しかし、あなたがスクリプトを完成させる必要がある場合、exit()で何も問題ないと思います。内部ZFリダイレクトにも使用されています;) –

関連する問題