[PHP-users 25867] Re: ファイルの出力中にメモリフロー
sho
sho @ big.or.jp
2005年 6月 21日 (火) 08:49:42 JST
こんにちは、sho と申します。
[PHP-users 25045] ファイルの場所を隠す&読み込みながら書き出し
http://ns1.php.gr.jp/pipermail/php-users/2005-March/025564.html
という同じ内容のスレッドがありますよ。解決方法に関しても示して
ます。
At Mon, 20 Jun 2005 23:06:59 JST,
keijiro <icm @ pepota.com> wrote:
>
> --------------------
> その1.
> 大容量バッファを出力しますが、正常に動作しません。
> --------------------
>
> $theFile = "../movie.avi";
> header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
> header ("Content-Type: application/octet-stream");
> header ("Content-Length: " . filesize($theFile));
> header ("Content-Disposition: attachment; filename=mv.avi");
> $fp = fopen($theFile);
> flush();
> while(! feof($fp)){
> ob_start();
> $buf = fgets($fp, 4096);
> print $buf;
> ob_end_flush();
> }
> fclose($fp);
わざわざ ob_start させている理由がわかりません。outbuffer を使用する必要が
あるのでしょうか?
> --------------------
> その2.
> 小さいファイルなら成功しますが、
> サイズが大きくなると、止まります。
> --------------------
> $theFile = "../movie.avi";
> header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
> header ("Content-Type: application/octet-stream");
> header ("Content-Length: " . filesize($theFile));
> header ("Content-Disposition: attachment; filename=mv.avi");
> readfile($theFile);
> $fp = fopen($theFile);
> flush();
> readfile($theFile);
> ob_end_flush();
readfile を2度も呼んでますが?fopen は何のためでしょう?
あと、ob_end_flush はファイルを呼び出す前じゃないと、バッファをクリアする
意味がありません。
なんか、使用している関数に関してその動作に関して知らないで闇雲に並べてテスト
してる印象を受けます。マニュアルを一読されることをお勧めします。
-- sho
PHP-users メーリングリストの案内