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

萩原 kahos @ mcn.ne.jp
2005年 3月 24日 (木) 16:35:11 JST


shoさんこんにちは
>> >又、上記のreadfileの場合ファイルサイズが大きくなるととても重くなってしまいます。
>> >過去ログ([PHP-users 10754])に”読み込みながら、書き出せば良いのではないですか?”
>> >という指摘がありましたがこれをどう実現していいのかわからずに困っています。
>> 
>> 私は、readfileで我慢できる程度のファイルサイズしか扱ったことがないのです
>> が、原理的には、freadとfwriteの繰り返しで実現できるのではないかと思います。
>
>また、fwrite や fpassthru 等を使っても出力バッファを迂回しているわけではない
>ので、結果的には readfile と変わりません。

今何が正しいのかちょっとわからなくなってきました(^^;

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

これは output_buffering のことを指されているのでしょうか
試しに output_buffering = Off  にしてみたり 1024 と小さい値にしたり
memory_limit を 8M → 1M → 64M といろいろ値を変えてやってみたのですが

逐次データを読み込んで出力しているようには感じることができませんでした。

全てを読み込んでから httpサーバに受け渡されて転送が始まっているように
感じています。

PHPでは、原理的にファイルを読み込みながら途中でhttpサーバに受け渡して転送しながら
PHPでファイルを読み続けファイルの転送を完了することが可能なのでしょうか?

可能なのでしたらやはり原因はスクリプトの書き方なのでしょうか。


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