ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルを使用して大きなファイルをすばやく読み取る方法

PHP_PHP チュートリアルを使用して大きなファイルをすばやく読み取る方法

WBOY
WBOYオリジナル
2016-07-13 10:17:23858ブラウズ

PHP で大きなファイルをすばやく読み取る方法

PHP でファイルを読み取る最も速い方法は、filefile_get_contents などのいくつかの関数を使用することです。ほんの数行のコードで、私たちが必要とする機能。ただし、操作するファイルが比較的大きなファイルの場合、これらの機能では不十分な場合があります。ここでは、大きなファイルを読み込むときによく使用される操作方法について説明します。

需要

約 500 万行を含む 8 億のログ ファイルがあります。PHP を使用して最後の数行の内容を返します。

実施方法

1. ファイル機能を直接使用して操作します

ファイル関数は一回限りすべての内容をメモリに読み込みますので、PHPは最大メモリ使用量が16Mに制限されます。これは、php.iniのmemory_limit = 16Mで設定されます。値が -1 に設定されている場合、メモリ使用量は制限されません。

以下は、 file を使用してこのファイルの最後の行を抽出するコードです:

リーリー

コード全体の実行には 116.9613 (秒) かかります。

私のマシンには 2G のメモリがあり、F5 キーを押して実行すると、システムが灰色になり、ほぼ 20 分後にのみ回復します。このような大きなファイルをメモリに直接読み込むと重大な結果が生じることがわかります。いいえ、memory_limit を高く設定しすぎることはできません。そうでない場合は、コンピュータ室に電話してマシンをリセットするように依頼するしかありません。

2. Linux tail コマンドを直接呼び出して、最後の数行を表示します

Linux コマンドラインでは、tail -n 10 access.log を直接使用して、ログ ファイルの最後の数行を簡単に表示できます。PHP を直接使用して、tail コマンドを呼び出すことができます。

実行 PHP コードは次のとおりです。 リーリー

コード全体の実行には 0.0034 (秒) かかります

3. PHP の fseek を直接使用してファイル操作を実行します

この方法は最も一般的な方法であり、ファイルの内容をすべて読み取る必要はなく、ポインターを介して直接操作するため、非常に効率的です。 fseekを使用してファイルを操作する場合、さまざまな方法があり、効率が若干異なる場合があります。一般的に使用される方法は次の 2 つです。

方法1

最初に fseek を通じてファイルの最後の EOF を見つけ、次に最後の行の開始位置を見つけて、この行のデータを取得し、次に次の行の開始位置を見つけて、次にこの行の位置を取得します。 $ num 行が見つかるまで続けます。

#実装コードは以下の通りです

リーリー

コード全体の実行には 0.0095 (秒) かかります

方法 2

引き続き fseek を使用してファイルの末尾から読み取りますが、今回は少しずつ読み取るのではなく、データを部分的に読み取るたびに、読み取ったデータを buf に配置します。改行文字の数 (n) を使用して、最後の $num 行のデータが読み取られたかどうかを判断します。

#実装コードは以下の通りです

リーリー

コード全体の実行には 0.0009 秒かかります。

方法 3 リーリー

コード全体の実行には 0.0003 秒かかります

興味のある記事

    ディレクトリを読み取り、ディレクトリ内のファイルを一覧表示する php 関数
  • XML ファイルの読み取りに関する php の概要
  • PHP は Curl 関数を使用して実装されますWeb ページのマルチスレッド クロールとファイルのダウンロード
  • php error_log() はエラー情報をファイルに書き込みます
  • PHP の変数をシリアル化する 4 つの方法の競合
  • PHP の GZip 圧縮機能を使用して Web サイトの JS および CSS ファイルを圧縮して Web サイトを高速化しますアクセス
  • PHPはディレクトリとディレクトリ内のすべてのファイルを削除します
  • PHPでの同時読み取りおよび書き込みファイルの競合の問題を解決する方法

http://www.bkjia.com/PHPjc/892950.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/892950.html技術記事 PHP で大きなファイルをすばやく読み取る方法 PHP でファイルを読み取るとき、最も速い方法は、file や file_get_contents などの関数をわずか数行で使用することです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。