[PHP-users 25088] Re: ファイルの場所を隠す&読み込みながら書き出し

sho @ big.or.jp sho @ big.or.jp
2005年 3月 24日 (木) 15:13:12 JST


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

At Wed, 23 Mar 2005 13:14:50 JST,
 papa pahoo <papa @ pahoo.org> wrote:
> 
> >又、上記のreadfileの場合ファイルサイズが大きくなるととても重くなってしまいます。
> >過去ログ([PHP-users 10754])に”読み込みながら、書き出せば良いのではないですか?”
> >という指摘がありましたがこれをどう実現していいのかわからずに困っています。
> 
> 私は、readfileで我慢できる程度のファイルサイズしか扱ったことがないのです
> が、原理的には、freadとfwriteの繰り返しで実現できるのではないかと思います。

うーん、勘違いだと思いますが。

readfile は一度ファイルを全部メモリに読み込んでから出力しているわけではなく、
逐次データを読み込んでは標準出力に出力しているだけだとおもいます。
ただ、出力バッファがあるので、設定が ON になってればファイルがすべてメモリに
展開されたように見えるのでしょう。
よって、出力バッファを OFF にすればデータはすぐに出力されますので、メモリを
消費することもないはずです。

また、fwrite や fpassthru 等を使っても出力バッファを迂回しているわけではない
ので、結果的には readfile と変わりません。

php.net の readfile のコメントにmemory_limitとの関連コメントが載っているよう
ですが、これも同様の勘違いでは?と思います。
また、[PHP-users 10754] では、fpassthru を使った例がありますが、readfile は
内部的にはほぼ fopen + fpassthru の動作と思ってよいので、これも同様だと思い
ます。
# v4.3.9 のソースを見た感じではそう思える
# 古いバージョンは見てないけど。

-- sho


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