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

sho sho @ big.or.jp
2005年 6月 22日 (水) 09:30:17 JST


こんにちは、sho と申します。

At Tue, 21 Jun 2005 12:51:55 JST,
 Yasuo Ohgaki <yohgaki @ ohgaki.net> wrote:
> 大垣です。
> 
> また、readfile()は一旦全てのファイルの中身を読み出します。
> # つまりメモリに入れます。
> 
> while(!feof($fp)) { }
> 
> などとして順次読み込みするか、fpassthru()なら大丈夫です。
> 
> fpassthru($fp);

これ、よく聞きますが根拠は?

int readfile ( string filename [, bool use_include_path [, resource context]] )
英文マニュアル:Reads a file and writes it to the output buffer.
日本語マニュアル:ファイルを読んで標準出力に書き出します。

int fpassthru ( resource handle )
英文マニュアル:Reads to EOF on the given file pointer from the current position and writes the results to the output buffer.
日本語マニュアル:与えられたファイルポインタをEOFまで読み、結果を標準出力に書き出し ます。

どちらも出力先は output buffer であって、バッファリングしてあれば、結局それは
メモリに入ります。要は、readfile は file を open する処理してくれるかどうか
で、fopen + fpassthru と動作内容は変わりません。
という指摘を [PHP-users 25088] でもしてるんですが…

ちなみに php-5.0.4 にはここいらへんにバグがあるらしく、
2000000 byte で出力が止まりますのでご注意を。
 http://bugs.php.net/bug.php?id=32553
 http://bugs.php.net/bug.php?id=32822
# main/php_streams.h の PHP_STREAM_COPY_ALL 設定値が適切じゃないってことかな?

-- sho


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