[PHP-users 25871] Re: ファイルの出力中にメモリフロー

Yasuo Ohgaki yohgaki @ ohgaki.net
2005年 6月 21日 (火) 12:51:55 JST


大垣です。

keijiro wrote:
> --------------------
>  その1.
>  大容量バッファを出力しますが、正常に動作しません。
> --------------------
> 
> $theFile = "../movie.avi";
> header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
> header ("Content-Type: application/octet-stream");
> header ("Content-Length: " . filesize($theFile));
> header ("Content-Disposition: attachment; filename=mv.avi");
> $fp = fopen($theFile);
> flush();
> while(! feof($fp)){
> ob_start();

バッファサイズを指定しないと全ての出力バッファした後、出力
します。
# つまりファイル全体がバッファされます。

ob_get_level()で出力バッファのネストレベルを確認することを
お勧めします。途中にバッファサイズが指定されていない出力
バッファがあると全てバッファした後、出力する事になります。

大きなファイルの場合、8KB毎くらいでバッファすると良いと思
います。

また、readfile()は一旦全てのファイルの中身を読み出します。
# つまりメモリに入れます。

while(!feof($fp)) { }

などとして順次読み込みするか、fpassthru()なら大丈夫です。

fpassthru($fp);

--
Yasuo Ohgaki
http://blog.ohgaki.net/



PHP-users メーリングリストの案内