[php] 중첩 함수 호출 한계 증가

PHP에는 한 가지 매우 나쁜 한계가 있습니다. a2 ()를 호출하는 a1 () 함수를 호출하면 a3 a99()을 호출 a100()합니다.

치명적인 오류 : 최대 기능 중첩 수준 ‘100’에 도달하여 중단되었습니다!

100 회의 중첩 호출 제한을 500 또는 10000으로 늘릴 수있는 방법이 있습니까?

콜백이 많은 이벤트 기반 시스템을 개발하고 있기 때문에 이것은 중요합니다.



답변

이 오류 메시지는 특히 XDebug 확장에서 발생합니다. PHP 자체에는 함수 중첩 제한이 없습니다. php.ini 에서 설정 을 변경 하십시오 :

xdebug.max_nesting_level = 200

또는 PHP 코드에서 :

ini_set('xdebug.max_nesting_level', 200);

실제로 변경 해야하는 경우 (예 : 재귀 함수에 대한 대안 솔루션이있는 경우) 코드없이 말할 수 없습니다.


답변

Zend, IonCube 또는 xDebug가 설치되어 있습니까? 그렇다면이 오류가 발생했을 수 있습니다.

몇 년 전에이 문제가 발생하여 PHP가 아닌 Zend가 그 한계를 뛰어 넘었습니다. 물론 그것을 제거하면 100 반복을 지나갈 수 있지만 결국 메모리 한계에 도달합니다.


답변

개인적으로 조정이 필요한 설정과 달리 오류라고 제안합니다. 내 코드에서 컨트롤러 중 하나의 라이브러리와 동일한 이름을 가진 클래스가 있었기 때문에 클래스가 트립 된 것처럼 보였습니다.

출력 오류 및 이것이 트리거되는 위치를 확인하십시오.


답변