PHP中一個非常糟糕的上限:如果您調用一些功能A1()調用A2()調用A3 ......所以,當a99()
會叫a100()
你會看到增加嵌套函數調用限制
Fatal error: Maximum function nesting level of '100' reached, aborting!
有沒有辦法將100個嵌套調用的限制增加到500或10000?
這對我來說很重要,因爲我正在開發一個具有大量回調的基於事件的系統。
PHP中一個非常糟糕的上限:如果您調用一些功能A1()調用A2()調用A3 ......所以,當a99()
會叫a100()
你會看到增加嵌套函數調用限制
Fatal error: Maximum function nesting level of '100' reached, aborting!
有沒有辦法將100個嵌套調用的限制增加到500或10000?
這對我來說很重要,因爲我正在開發一個具有大量回調的基於事件的系統。
此錯誤消息來自XDebug擴展。 PHP本身沒有函數嵌套限制。在php.ini更改the setting:
xdebug.max_nesting_level = 200
或在PHP代碼:
ini_set('xdebug.max_nesting_level', 200);
至於如果你真的需要改變它(即:如果有一個替代解決方案遞歸函數) ,沒有代碼我就說不出來。
您是否安裝了Zend,IonCube或xDebug?如果是這樣,那可能是你從這個錯誤中得到的。
幾年前我遇到過這種情況,它最終成爲了Zend將這個限制放在那裏,而不是PHP。當然,刪除它可以讓你通過100次迭代,但最終會達到內存限制。
如果你使用了XDebug(與XAMPP,例如),您可以通過添加這php.ini
文件中設置嵌套級(我建議把在文件的底部):
[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
; Other settings if needed
xdebug.max_nesting_level = 500
這將設置爲500限制,但如果需要可以更多。只有鏈接到XDebug文件php_xdebug.dll
我個人建議這是一個錯誤,而不是一個需要調整的設置。在我的代碼中,這是因爲我有一個類與我的控制器中的一個庫具有相同的名稱,並且它似乎將其啓動。
輸出錯誤並查看觸發的位置。
100似乎有點過分,即使是一個事件框架。 – 2010-11-27 20:47:05
@Ignacio:即使焦點放在事件框架上,它也非常簡單,只需要一個遞歸函數,它需要更高的嵌套級別。數萬(甚至數百萬)在這種情況下並不少見。 – Abel 2011-12-28 12:50:08