ファイルを数行読み込む必要があるのですが、ファイルが比較的大きいので、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
true
http://www.bkjia.com/PHPjc/327872.html
技術記事ファイルを数行読み込む必要があるのですが、ファイルが比較的大きいので、PHP で大きなファイルを数行読み込む方法を調べてメソッドを書きました。コードは次のとおりです (コメント付き)。 ..