[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 メーリングリストの案内