PHP で大きなファイルの末尾にある N 行を読み取るための推奨される効率的な方法、_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:51:08
オリジナル
724 人が閲覧しました

PHP が大きなファイルの末尾にある N 行を読み取るための推奨される効率的な方法

数メガバイト以内の小さなファイルの場合は、file() 関数を使用してファイルを 1 行ずつ配列に読み取ることができます。次に、 array_pop を使用して最後の行を取得します。

ただし、非常に大きなテキスト ファイルの場合、マシンのメモリが十分に大きくないか、PHP 自体にmemory_limit 制限があるため、制限がない場合でもこの方法は適用できません。

他に方法はないのでしょうか?もちろんありますが、既成の機能はないので自分でやる必要があります。

ここでファイルポインターを使用する必要があります。C を勉強したことがある人は、ポインターが何であるかを知っているはずです。この時点では、ファイルは fopen を通じて開かれます。時刻では、ポインタはファイルの先頭を指します。位置は 0 です。 fgets または fgetc を通じてファイルからコンテンツを読み取ると、読み込むにつれてポインタが進みます。これも

​​ です。 リーリー

実装の原則は、fgets が改行文字に遭遇するまで、現在のポインター位置から逆方向に指定された長さの文字列を読み取ることです。

下からN行目へのポインタの位置を制御することは可能でしょうか?残念ながらできませんが、 fseek() 関数を使用して、ポインタを末尾や N 位置まで直接移動できます。

まずポインタを最後まで移動し、2つ前の位置に戻り、fgetcで文字を読み込み、その文字が改行文字であるかどうかを判断します。改行文字でない場合は、続けて進みます。前の行の最後の改行文字に戻るまで、fgets を使用して行全体を取り出します。ここでは 2 つの while ループが使用されています。外側のループは取得する行数を制御し、内側のループは fseek アクションを制御します。

関数は次のとおりです:

リーリー

PHP で大きなファイルの末尾にある N 行を効率的に読み取る方法に関する上記の推奨事項は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、皆さんにも Bangkejia をサポートしていただければ幸いです。

www.bkjia.com本当http://www.bkjia.com/PHPjc/1133021.html技術記事 PHP では、大きなファイルの末尾にある N 行を読み取る効率的な方法を推奨しています。数メガバイト以内の小さなファイルの場合は、file() 関数を使用してファイルを 1 行ずつ配列に読み取り、array_pop を使用してファイルを取得します。最後の行...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート