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

Yasuo Ohgaki yohgaki @ ohgaki.net
2005年 6月 23日 (木) 10:12:18 JST


大垣です。

sho wrote:
> 要は、readfile は file を open する処理してくれるかどうか
> で、fopen + fpassthru と動作内容は変わりません。
> という指摘を [PHP-users 25088] でもしてるんですが…

そういえば今はその通りですね。現在はphp_stream_passthruを呼ぶので一緒です。
忘れていました。ご指摘ありがとうございます。

> ちなみに 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 設定値が適切じゃないってことかな?

PHP_STREAM_COPY_ALLが-1だったに2000000に設定したらそこまでしか読めませんね。
これはPHP5のみ影響がありますね。

ところでPHP_4_4のソースを読むと出力バッファが有効でMMAPがあるシステムの場合、
どうがんばってもphp_stream_passthruを呼び出すと大きなファイルを出力すると
メモリを大量に使います。

PHP4を使っている場合、上記のバグは無関係なのでこちらが原因かもしれません。
これが原因ならPHPをビルドする際にHAVE_MMAPが定義されないようにしてビルドする
と出力できるようになると思います。

PHP_4_4ブランチのソースを見て書いており、修正を全部覚えている訳ではないので
正確には使用中のPHPで確認してください。はmain/stream.cの_php_stream_passthru
関数のコードを見ると直ぐに分かります。

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





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