[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 メーリングリストの案内