ホームページ >バックエンド開発 >PHPチュートリアル >PHP での大きなファイルの読み取りに関するいくつかの質問

PHP での大きなファイルの読み取りに関するいくつかの質問

WBOY
WBOYオリジナル
2016-06-23 14:06:30936ブラウズ

6G ログ ファイルを分析し、ファイルの各行が要件を満たしているかどうかを比較したいのですが、手順は次のとおりです
rree
パフォーマンスはどのようになっているかを聞きたいのですが、メモリ リークなどの問題は発生しませんか? ? さらに最適化する方法はありますか?


ディスカッションに返信 (解決策)

まずこのファイルをいくつかの小さなファイルに分割する必要があります
次に、それぞれの小さなファイルをループで読み取ります。

$ split -b under linux
Split...

$ split -b under linux
Split...
なぜ fgets を使用すると、一度に 1 行ずつ読み取られるだけでなく、すべての行が読み取られるわけではありません。ああ

fgets を使用する場合は、1 行ずつ読み取らないようにすることをお勧めします。

これで、ログは規定の形式に従ってアクセスされるため、各行がそれほど長くならないことがわかります

ああ、それならわかりますね!ハハ、私はただ提案しているだけです!

ああ、それなら、あなたがそれを理解する必要があります!ハハ、私はただ提案しているだけです!
確かに、あなたがやったことを何人か見たことがありますが、一度にメモリに読み込まれない場合は、ファイルをカットしたり、一時ファイルを削除したりしても、これは私の個人的な感覚です。何か間違っているところがありましたら、ご指摘ください

6G テキスト ファイル...

このような大きなファイルをどうやって編集できますか?
ログは日、週、月ごとに記録する必要があります。一定のサイズを超える場合は、新しいファイルを作成します

複数のファイルに分割する必要があります

6G のテキスト ファイル...

どうすればそのようなファイルを整理できますか?大きなファイル?
ログは日、週、月ごとに記録する必要があります。一定のサイズを超える場合は、新しいファイルを作成します

複数のファイルに分割する必要があります
当社の行動ログは 1 日あたり 6G です

はい、問題ありません。非常に時間がかかります

コードに関する限り、少しは短縮できます
$file_path = 'd:workworkplacetestfilesystem.log'
$file = fopen($file_path, 'r'); key = md5(0);
$i = 1;
while ($buff = fgets($file)) {
if ($buff == $key . "rn")
{
echo "行 { $i}rn";
}
$i ++;
}
fclose($file);

一度に読む量が多い場合(1M など)、高速になる可能性があります。しかし、アルゴリズムはもう少し複雑です

この種のことを行うのは PHP の強みではありません


WEB をやりたくない場合は、他のプログラムを使用する必要があります。

9 階のbaiyuxiong からの引用:

6G のテキスト ファイル...

このような大きなファイルをどうやって整理できますか?
ログは日、週、月ごとに記録する必要があります 一定のサイズを超える場合は、新しいファイルを作成します

複数のファイルに分割する必要があります

当社の行動ログ、1日6G

書き方シェル内で、助けてください。そうでない場合は、ありがとうございます

次に何が起こりましたか?どうやって解決しましたか? ?

fgets を使用して読み取るファイルはそれほど大きくありません。150M の csv ファイルを 1 行ずつ読み取る場合 (非常に長い行は表示されないことがわかっています)、必要ありますか。ファイルポインタを設定するためにもう一度 fseek を使用しますか?効率は改善できるでしょうか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。