file関数とfopen関数の速さ

前回質問して自分だけ自己解決してたわけだけど、もう少しわかりやすく書いておく。
http://d.hatena.ne.jp/tukihatu/20080626/1214445854

fopenとfileでは、fopenの方が低メモリでできる。
しかしwhileで回してるので件数増えると重い。
つまり

1000件データを回すとして
$fp=fopen("file",r);
while(){
$date[]=
}

と
$date=file("file");

は同じ処理。

$fp=fopen("file",r);
$date[0]=
$date[1]=
…
$date[999]=

と

$date=file("file");

は同じ処理

結局whileは繰り返しで同じコードをなんども書いてることになる。
だから遅い。

解決法としてはfileを使うか、freadを使ってみるか、そもそも全部読み込む必要あるの?という制限をつけるとか。
ただfileは配列に全部読み込むので、読み込む量が多いとメモリが足りずに処理が停止する…
といってもwhileでも同じことが起きるはずですが。

PHPでテキストファイルに保存したログを一覧表示させたいと思います。 プログラムとデザイン(html)の部分を分ける為に、以下のようにしました。 // ファイルからデータを取得 $fp = fopen("log.txt","r"); $i=0; while(!feof($fp)){ // ファイルから1行読み込み $line = fgets($fp,1000); // タブ区切りを配列にする $array = explode("\t",$line); // 表示用の配列に代入 $list[$i]["date"] = $array[0]; $list[$i]["ua"] = $array[1]; $list[$i]["host"] = $array[2]; $i++; } // 表示用 ※繰り返し箇所のみ掲載 しかし、上記の方法だと1万行の処理をするのに2?3秒の時間を要します。 一旦配列に代入しているので時間がかかるのは分かるのですが、 もしかしたら自分の書き方・考え方が間違っているのではないか?と思っています。 他に良い方法がありましたら、アドバイスいただければと思います。 ※あくまでPHPとテキストファイルを使った上での実験ですので、DBを利用するという代替案は無しでお願いします。 ※PHPは5.2.6を使っています。