बढ़ते नेस्टिंग फ़ंक्शन कॉल की सीमा


127

PHP में एक बहुत बुरी सीमा है: अगर आप a2 () को कॉल करने वाले कुछ फ़ंक्शन a2 () कहते हैं, जो a3 को कॉल करता है ... तो आप कब a99()कॉल a100()करेंगे

घातक त्रुटि: '100' के अधिकतम फ़ंक्शन नेस्टिंग स्तर पर पहुंच गया, गर्भपात!

क्या 100 नेस्टिंग कॉल की सीमा को 500 या 10000 तक बढ़ाने का कोई तरीका है?

यह मेरे लिए महत्वपूर्ण है क्योंकि मैं बहुत सारे कॉलबैक के साथ एक घटना-आधारित प्रणाली विकसित कर रहा हूं।


12
100 एक घटना के ढांचे के लिए, थोड़ा बहुत अधिक लगता है।
इग्नासियो वाज़केज़-अब्राम्स

7
@ इग्नासियो: यह काफी सरल है, भले ही फोकस एक घटना ढांचे पर हो, एक पुनरावर्ती कार्य करने के लिए जो बहुत अधिक घोंसले के शिकार स्तर की आवश्यकता होती है। ऐसे परिदृश्य में हजारों (या लाखों) भी असामान्य नहीं हैं।
हाबिल

stackoverflow.com/a/36440027/2652524 मैं इस उत्तर का उपयोग करके अपना हल निकालता हूं
गुजरात संताना

जवाबों:


254

यह त्रुटि संदेश विशेष रूप से XDebug एक्सटेंशन से आता है। PHP में स्वयं फंक्शन नेस्टिंग की सीमा नहीं है। अपने php.ini में सेटिंग बदलें :

xdebug.max_nesting_level = 200

या अपने PHP कोड में:

ini_set('xdebug.max_nesting_level', 200);

जैसे कि यदि आपको वास्तव में इसे बदलने की आवश्यकता है (यानी: यदि एक पुनरावर्ती फ़ंक्शन का वैकल्पिक समाधान है), तो मैं कोड के बिना नहीं बता सकता।


मुझे भी यही समस्या थी। मेरा max_nesting_level 100 पर सेट किया गया था, लेकिन मेरे मामले में, कुछ मामलों में, 1000 पुनरावर्ती कॉल होना संभव है। तो, मैं इस xdebug त्रुटि से बचने के लिए 10000 पर सेट हूं। सभी मामलों में, यह हमेशा PHP से बिना किसी सीमा के बेहतर होता है।
स्केजेस

9
यदि आपके पास यह xdebug.max_nesting_level = 100विकल्प नहीं है तो अपने php.ini में बस वही पेस्ट करें।
एम। रेजा नासिरेलो

@Pedram प्रतिलिपि करने का सही तरीका यह है कि php ini फ़ाइल /etc/php5/apache2/conf.d/20-xdebug.ini में है, न कि सामान्य php.ini में। बस एक अच्छा अभ्यास
एनरिक क्वेर

3
@EnriqueQuero सिस्टम और OS पर निर्भर करता है।
netcoder

यह काम करता हैं! कोई फर्क नहीं पड़ता कि आप XDebug का उपयोग करते हैं या नहीं, और न ही यदि आप php.ini में लाइन की टिप्पणी करते हैं। मैंने स्पष्ट रूप से उपयोग किया: ini_set ('xdebug.max_nesting_level', -1);
user2928048

13

क्या आपके पास Zend, IonCube, या xDebug स्थापित है? यदि ऐसा है, तो संभवतः यह है कि आपको यह त्रुटि कहां से मिल रही है।

मैं कुछ साल पहले इस में भाग गया, और यह समाप्त हो गया Zend कि सीमा नहीं है, वहाँ PHP। निश्चित रूप से इसे हटाने से आप 100 पुनरावृत्तियों को पार कर सकते हैं, लेकिन आप अंततः मेमोरी सीमा से टकराएंगे।


1

व्यक्तिगत रूप से मेरा सुझाव है कि यह एक सेटिंग के विपरीत एक त्रुटि है जिसे समायोजन की आवश्यकता है। मेरे कोड में ऐसा इसलिए था क्योंकि मेरे पास एक वर्ग था जिसका मेरे नियंत्रकों के भीतर एक पुस्तकालय के समान नाम था और यह उसे ऊपर ले जाने के लिए लग रहा था।

आउटपुट त्रुटियां और देखें कि यह कहां ट्रिगर किया जा रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.