常見需求:將一個純文字文件(如編號列表、配置項)逐行讀取並轉換為 PHP 陣列供後續處理。以 2010-12-15.txt 為例,內容為每行一個代碼(01~24、T01~T16)。
file_get_contents() 將文件內容一次性載入字符串。explode() 依據換行符拆分為陣列。count() 獲取長度,配合迴圈逐行操作。<?php
$file = '2010-12-15.txt';
$content = file_get_contents($file);
// 關鍵點:Windows 換行符是 \r\n,Linux 是 \n,Mac 老版本是 \r
// 建議用 PHP_EOL 常量或正則兼容多平台
$array = explode("\r\n", $content); // 或 preg_split('/\r?\n/', $content)
foreach ($array as $line) {
echo $line . '<br />';
}
?>
文章原文詳細解釋了 \r (Carriage Return) 和 \n (Newline) 的歷史由來:
\r\n (CRLF)\n (LF)\r (CR)最佳實踐:使用 preg_split('/\r?\n/', $content) 或先統一換行符 str_replace(["\r\n", "\r"], "\n", $content) 再用 explode("\n", ...),確保跨平台兼容。
allow_url_fopen),如 file_get_contents('https://example.com/data.txt')。| 方法 | 適用場景 | 記憶體佔用 | 速度 |
|---|---|---|---|
| file() | 直接返回陣列,每行一個元素 | 中等 | 快 |
| fopen() + fgets() | 超大文件、逐行處理、邊讀邊算 | 極低(流式) | 較慢 |
| SplFileObject | 物件導向、支援迭代器、CSV 解析 | 低 | 快 |
對於中小型文本文件,file_get_contents() + explode() 是最簡潔高效的組合。關鍵在於正確處理換行符,建議封裝為通用工具函數以備複用。