在 PHP 中,使用 file()
函數讀取大文件可能會導致內存不足或程序執行時間過長。為了解決這個問題,可以采用以下技巧來逐行讀取大文件:
fopen()
和 fgets()
函數:$filename = "large_file.txt";
$handle = fopen($filename, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
// 處理每一行數據
processLine($line);
}
fclose($handle);
} else {
echo "無法打開文件: " . $filename;
}
file()
函數的 readfile()
或 fread()
函數:$filename = "large_file.txt";
if (file_exists($filename)) {
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"" . basename($filename) . "\"");
header("Expires: 0");
header("Cache-Control: must-revalidate");
header("Pragma: public");
header("Content-Length: " . filesize($filename));
readfile($filename);
} else {
echo "文件不存在: " . $filename;
}
SplFileObject
類:$filename = "large_file.txt";
if (file_exists($filename)) {
$file = new SplFileObject($filename, 'r');
$file->seek(PHP_INT_MAX); // 將文件指針移動到文件末尾
while (!$file->eof()) {
// 處理每一行數據
processLine($file->fgets());
}
$file = null;
} else {
echo "文件不存在: " . $filename;
}
這些方法都可以避免一次性讀取整個文件到內存中,從而提高處理大文件的性能。在實際應用中,可以根據需要選擇合適的方法。