function rt() {
static $i = 0;
echo $i++ . '
';
rt(); // 無限遞迴
}
rt();
Windows + PHP 5.3 + Xdebug 環境輸出:
Fatal error: Maximum function nesting level of '100' reached, aborting!
但 Linux CLI 下卻進入死迴圈(直到記憶體耗盡)。
此限制來自 Xdebug 擴展,非 PHP 核心。Xdebug 為了防止開發環境因遞迴錯誤耗盡記憶體影響其他開發者,預設限制巢狀層級 100。
原始碼位置 xdebug.c:1242:
XG(level)++;
if (XG(level) == XG(max_nesting_level)) {
php_error(E_ERROR, "Maximum function nesting level of '%ld' reached, aborting!", XG(max_nesting_level));
}
; 取消註解並調整數值
xdebug.max_nesting_level = 500
重啟 PHP-FPM/Apache 生效。
ini_set('xdebug.max_nesting_level', 500);
memory_limit)。每層呼叫消耗堆疊框架記憶體。生產環境不應啟用 Xdebug,會嚴重影響效能。此限制僅存在開發/測試環境。