file($path) を使用して大きなテキスト ファイルの行数をカウントすると、次のようなメモリ枯渇エラーが発生する可能性があります。ファイル全体がメモリにロードされます。この問題に対処するには、より効率的でメモリを節約するアプローチが必要です。
行を効率的にカウントする方法の 1 つは、fgets() 関数を使用することです。一度に 1 行ずつ読み取り、処理することで、ファイル全体をメモリにロードすることを回避できます。
<code class="php">$file = "largefile.txt"; $linecount = 0; $handle = fopen($file, "r"); while (!feof($handle)) { $line = fgets($handle); $linecount++; } fclose($handle); echo $linecount;</code>
このコードは、読み取り用にファイルを開き、fgets() を使用して一度に 1 行ずつ読み取り、インクリメントします。
もう 1 つのアプローチは、行末文字をカウントすることです。
<code class="php">$file = "largefile.txt"; $linecount = 0; $handle = fopen($file, "r"); while (!feof($handle)) { $line = fgets($handle, 4096); $linecount += substr_count($line, PHP_EOL); } fclose($handle); echo $linecount;</code>
ここでは、substr_count() を使用して、読み取られたデータの各チャンク内の改行の数をカウントします。
これらのメソッドはどちらも、ファイル全体をメモリにロードするのではなく、行を段階的に処理するため、メモリ使用量が少なくなります。
以上が大きなテキスト ファイル (200 MB) の行数を効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。