PHP 腳本在處理大量資料(如匯入 CSV、圖片處理、大型陣列運算)時,記憶體耗盡是常見錯誤。PHP 提供 memory_get_usage() 與 memory_get_peak_usage() 兩個函數,可即時監控腳本記憶體消耗,協助優化與除錯。
memory_get_usage(bool $real_usage = false):回傳當前腳本分配的記憶體位元組數。若 $real_usage=true 則回傳系統實際分配量(含內部緩衝)。memory_get_peak_usage(bool $real_usage = false):回傳腳本啟動以來的記憶體峰值。<?php
echo "初始: " . memory_get_usage() . " 位元組\n";
// 模擬佔用記憶體:建立 10 萬個 MD5 字串
for ($i = 0; $i < 100000; $i++) {
$array[] = md5($i);
}
echo "建立陣列後: " . memory_get_usage() . " 位元組\n";
echo "峰值記憶體: " . memory_get_peak_usage() . " 位元組\n";
// 釋放記憶體
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo "釋放後: " . memory_get_usage() . " 位元組\n";
初始: 384,000 位元組 建立陣列後: 12,500,000 位元組 峰值記憶體: 14,200,000 位元組 釋放後: 390,000 位元組
memory_limit 時暫停釋放或分批寫入資料庫。ini_get('memory_limit') 取得限制值,計算使用率百分比。gc_collect_cycles() 強制垃圾回收,觀察循環引用釋放情況。善用 PHP 內建記憶體檢測函數,能在開發階段發現潛在記憶體問題,避免上線後出現 Allowed memory size exhausted 致命錯誤,是撰寫高品質 PHP 程式的基本功之一。