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

keijiro icm @ pepota.com
2005年 6月 20日 (月) 23:06:59 JST


はじめまして、keijiroといいます。

環境
RHEL4
PHP 4.3.9-3.6
apache 2.0.52-9

ファイルの場所を隠したいので、PHP経由で
ファイルを出力したいと思っています。

しかし、memory_limitで設定した容量を超えるファイルを
PHP経由で出力したとき、大きなファイルだとエラー終了してしまいます。


過去の質問に、同じような内容があり、
参考にして色々試してみたのですが、
うまく動作できませんでしたので、ご存じの方がいらっしゃいましたら
お力添えをお願いいたします。


参考:
[PHP-users 24798] ファイルのダウンロードでメモリの消費を抑える方法
http://ns1.php.gr.jp/pipermail/php-users/2005-March/025318.html


--------------------
 その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);


--------------------
 その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();


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

keijiro
icm @ pepota.com

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/




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