ホームページ  >  記事  >  バックエンド開発  >  大きなファイルの X 行から Y 行の内容を読み取るための PHP 実装コード_PHP チュートリアル

大きなファイルの X 行から Y 行の内容を読み取るための PHP 実装コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:03:00824ブラウズ

ファイルを数行読み込む必要があるのですが、ファイルが比較的大きいので、PHPで大きなファイルを数行読み込む方法を調べてメソッドを書きました。 コードは次のとおりです(コメント付き)。キャッシュファイルを保存できます 1行で指定した行数を読み込むアルゴリズムを使用すると、すべてを読み取って選択するよりも当然はるかに高速になりますが、PHPはこの点が弱いようで、使用するのは簡単ではありません。 SplFileObject はメモリ不足のため、まだ特にお勧めできません


コードをコピーします コードは次のとおりです:
$fp->seek($startLine - 1); テスト後、このコード行は 8MB テキストの最後の行に移動し、メモリ使用量は 49KB になります。これは悪くありません。fopen モードに切り替えて fgets を使用してモードをスキップすると、fopen がまだ持っているメモリが 29KB 消費されます。利点



コードをコピーします

コードは次のとおりです:
function getFileLines($filename, $startLine = 1, $endLine = 50, $method = 'rb'){ $content = array();
if (version_compare(PHP_VERSION, '5.1.0', '>=')) { // PHP のバージョンを決定します (SplFileObject を使用しているため、PHP>=5.1.0)
$count = $ endLine - $startLine;
$fp = new SplFileObject($filename, $method);
$fp->seek($ startLine - 1); // シークメソッドのパラメータは 0 からカウントされます
$i = 0; $i $content[] = $fp ->current() // current() は現在の行の内容を取得します
$fp- >next(); // 次の行
}
} else { //PHP$fp = fopen($filename, $method)
if (!$fp)
return 'エラー: ファイルを読み取れません';
for ($i = 1; $i < $startLine; ++$i) { // 前の $startLine 行をスキップ
fgets($fp);

for ($i; $i < = $endLine; ++$i) {
$content[] = fgets($fp); // ファイル行の内容を読み取る
}
return array_filter($content); filter: false,null,''
}



効果は良好で、SplFileObject クラス関数の方が優れています。



http://www.bkjia.com/PHPjc/327872.html
www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/327872.html

ファイルを数行読み込む必要があるのですが、ファイルが比較的大きいので、PHP で大きなファイルを数行読み込む方法を調べてメソッドを書きました。コードは次のとおりです (コメント付き)。 ..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。