বাড়তি বাসা বাঁধার ফাংশন কল সীমা


127

পিএইচপি-তে একটি খুব খারাপ সীমাবদ্ধতা রয়েছে: আপনি যদি কিছু ফাংশন এ 1 () কল করেন যা a2 () কল করে, যা এ 3 কল করে ... তাই কখন a99()ফোন a100()করবে আপনি দেখতে পাবেন

মারাত্মক ত্রুটি: '100' সর্বাধিক ফাংশন নেস্টিং স্তর পৌঁছেছে, বাতিল করা হচ্ছে!

100 বাসা বাঁধার কলের সীমা 500 বা 10000 তে বাড়ানোর কোনও উপায় আছে কি?

এটি আমার পক্ষে গুরুত্বপূর্ণ কারণ আমি প্রচুর কলব্যাক সহ ইভেন্ট-ভিত্তিক সিস্টেম বিকাশ করছি।


12
এমনকি ইভেন্টের কাঠামোর জন্যও 100 কে অতিরিক্ত অতিরিক্ত বলে মনে হচ্ছে।
Ignacio Vazquez-Abram

7
@ ইগনাসিও: এটি খুব সহজ, এমনকি যদি ইভেন্টের কাঠামোর দিকে মনোযোগ কেন্দ্রীভূত হয়, তবে পুনরাবৃত্তির জন্য একটি ফাংশন থাকতে হবে যাতে নীড়ের উচ্চ স্তরের প্রয়োজন হয়। কয়েক হাজার (বা এমনকি লক্ষ লক্ষ) এই জাতীয় পরিস্থিতিতে অস্বাভাবিক নয়।
আবেল

stackoverflow.com/a/36440027/2652524 আমি এই উত্তরটি ব্যবহার করে খনি সমাধান করি
গুজরাট সান্তানা

উত্তর:


254

এই ত্রুটি বার্তাটি এক্সডেবগ এক্সটেনশান থেকে বিশেষত আসে। পিএইচপি নিজেই একটি ফাংশন নেস্টিং সীমা নেই। আপনার php.ini এ সেটিংস পরিবর্তন করুন :

xdebug.max_nesting_level = 200

বা আপনার পিএইচপি কোডে:

ini_set('xdebug.max_nesting_level', 200);

যদি আপনার সত্যিই এটি পরিবর্তন করতে হয় তবে (যেমন: যদি পুনরাবৃত্তির কোনও বিকল্পের বিকল্প সমাধান থাকে), আমি কোড ছাড়াই বলতে পারি না।


আমারও একই সমস্যা ছিল। আমার সর্বোচ্চ_নিস্টিং_ লেভেলটি 100 এ সেট করা হয়েছিল তবে আমার ক্ষেত্রে, কিছু ক্ষেত্রে, 1000 পুনরাবৃত্ত কলগুলি পাওয়া সম্ভব। সুতরাং, আমি এই xdebug ত্রুটি এড়াতে 10000 এ সেট করেছি। সমস্ত ক্ষেত্রে, কোনও সীমা ছাড়াই পিএইচপি না দেওয়া ভাল।
স্কেজেস

9
xdebug.max_nesting_level = 100আপনার php.ini এ এই বিকল্পটি না থাকলে কেবল এটিকে আটকান
এম রেজা নাসিরলু

@ পেড্রাম পিএইচপি ইনআই ফাইলটিতে অনুলিপি করার সঠিক উপায়টি / পিটিসি / পিএইচপি 5/apache2/conf.d/20-xdebug.ini এ আছে, সাধারণ পিএইচপি.এনআই তে নয়। কেবল একটি ভাল অনুশীলন
এনরিক কুইরো

3
@ এনারিকুইকিউরো সিস্টেম এবং ওএসের উপর নির্ভর করে।
নেটকোডার

এটি কাজ করে! আপনি XDebug ব্যবহার করেন বা না করেন তা নয়, আপনি php.ini- এ লাইন মন্তব্য করেন না কেন। আমি স্পষ্টভাবে ব্যবহার করেছি: ini_set ('xdebug.max_nesting_level', -1);
ব্যবহারকারী 2928048

13

আপনি কি জেন্ড, আয়নক्यूब, বা এক্সডিব্যাগ ইনস্টল করেছেন? যদি তা হয় তবে সম্ভবত আপনি এখান থেকে এই ত্রুটিটি পাচ্ছেন।

আমি কয়েক বছর আগে এটিতে ছুটে এসেছি, এবং এটি শেষ হয়েছে জেন্ড সেখানে এই সীমাটি রেখেছিল, পিএইচপি নয়। অবশ্যই এটি অপসারণ আপনাকে 100 পুনরাবৃত্তিগুলি অতিক্রম করতে দেবে, তবে শেষ পর্যন্ত আপনি স্মৃতি সীমাতে আঘাত হানবেন।


1

ব্যক্তিগতভাবে আমি প্রস্তাব করব যে এটি এমন একটি ত্রুটি যা একটি সেটিংয়ের বিপরীতে যা সামঞ্জস্য করা প্রয়োজন। আমার কোডটিতে এটি ছিল কারণ আমার ক্লাসটি ছিল আমার কন্ট্রোলারগুলির মধ্যে একটি লাইব্রেরির মতো একই নাম এবং এটি মনে হয় এটি ট্রিপ করে চলেছে।

আউটপুট ত্রুটিগুলি দেখুন এবং এটি কোথায় ট্রিগার করা হচ্ছে তা দেখুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.