首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 取得檔案行數的兩種方法效能比較

     編輯:PHP 相關知識

PHP 取得檔案行數的兩種方法效能比較

統計大型文字檔行數時,方法選擇直接影響記憶體與執行速度。本文比較兩種常見做法並給出建議。

方法一:串流逐行讀取(推薦,低記憶體)

<?php
$filePath = 'large_log.txt';
$lineCount = 0;

$fp = fopen($filePath, 'r');
if ($fp) {
  // PHP 5.1+ 支援 stream_get_line,效能優於 fgets
  while (stream_get_line($fp, 8192, "\n") !== false) {
    $lineCount++;
  }
  fclose($fp);
}
echo "行數:$lineCount";
?>
  • 一次只在記憶體保留一行緩衝區(預設 8KB)。
  • 適合 GB 級大檔案,不會觸發 memory_limit。

方法二:file() 讀入陣列再計數(簡單但耗記憶體)

<?php
$lineCount = count(file('large_log.txt'));
echo "行數:$lineCount";
  • 將整個檔案內容載入陣列,每行佔一個元素。
  • 100MB 檔案可能消耗 200MB+ 記憶體,易導致 Allowed memory size exhausted。
  • 僅適合小檔案(< 10MB)或開發除錯快速使用。

效能測試參考(100MB 檔,約 300 萬行)

方法記憶體峰值執行時間
stream_get_line~2 MB~1.2 秒
file() + count()~250 MB~0.8 秒

結論: 生產環境處理大檔案務必使用串流讀取;小檔案或一次性腳本可用 file() 簡化代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved