當遇到超大文字檔案(數十 MB 甚至數 GB)時,一般編輯器會因記憶體不足而無法開啟。PHP 的 file_get_contents() 支援位移與長度參數,可實現分段讀取,避免一次性載入全部內容導致記憶體溢出。
string file_get_contents(
string $filename,
bool $use_include_path = false,
resource $context = null,
int $offset = 0,
int $maxlen = ?
)
參數說明:
<?php
// 從 1MB 處開始讀取 1MB 內容
$str = file_get_contents("2.sql", false, null, 1024*1024, 1024*1024);
echo $str;
?>
對於需完整處理大檔案的情況,使用 fread() 搭配迴圈更適合:
<?php
$fp = fopen('2.sql', 'r');
$filesize = filesize('2.sql');
$chunk = $filesize / 10; // 每次讀取 1/10
while (!feof($fp)) {
$str = fread($fp, $chunk);
// 處理 $str 內容...
}
fclose($fp);
?>
file_get_contents() 內部使用記憶體映射(mmap),效能優於 fread()fseek() 定位與 ftell() 追蹤位置ini_set('memory_limit', '512M'); 避免記憶體限制原文來源:111cn.net