[PHP-users 24798] ファイルのダウンロードでメモリの消費を抑える方法

鈴木孝征 takamasa @ thaliana.myhome.cx
2005年 3月 6日 (日) 23:00:43 JST


PHP-users MLの皆様へ。鈴木孝征と申します。

音楽ファイルや動画ファイルを送信するプログラムを開発していてメモリが使い果た
される現象に困っています。

環境
Vine Linux 3.1 (Linux 2.4.27)
Apache 1.3.33
PHP 4.3.10

CPU PentiumPro 200MHz
メモリ 96MB

下記のプログラムが異常終了してしまいます。
<?php
	$file = "movie.mpg";
	$fp = fopen($file);
	while(! feof($fp)){
		$buf = fgets($fp, 4096);
		print $buf;
	}
	fclose($fp);
?>

異常終了後apacheのログ(/var/log/httpd/error_log)に下記が記されていました。
Allowed memory size of 10485760 bytes exhausted (tried to allocate 4787953
bytes)

php.iniでmemory_limit = 10M としてあります(変更後httpdの再起動もしました。)

movie.mpgを小さなサイズにするとエラーは起きません。またmovie.mpgをapache経由でダウンロードする場合(http://localhost/movie.mpgへ直接アクセス)には上記のエラーが起きることなくファイルのダウンロードを完了することができます。

print $bufのあとにflush()を入れてみましたが改善されませんでした。

PHPでサイズの大きなファイルを送信するスクリプトを作成するにはどのような関数
を使用したらいいのでしょうか。




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