PHP घातक त्रुटि (E_ERROR) को कैसे पकड़ें: जाल और समाधान

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP घातक त्रुटि (E_ERROR) को कैसे पकड़ें और पागल न हों

\n\n

क्या आपने कभी यह देखा है? आपकी PHP साइट बिना किसी त्रुटि के एक खाली सफेद पेज दिखाती है। या, इससे भी बुरा, एक भयानक संदेश Fatal error: Uncaught Error...। यदि आप एक डेवलपर हैं जो PHP के साथ काम करते हैं, तो आपने E_ERROR का सामना किया है - त्रुटियों का सबसे अप्रिय प्रकार। चेतावनियों (Warnings) या सूचनाओं (Notices) के विपरीत, एक घातक त्रुटि स्क्रिप्ट के निष्पादन को पूरी तरह से रोक देती है। और सबसे बुरी बात: मानक try...catch ब्लॉक इसे नहीं पकड़ता है।

\n\n

इस लेख में, हम चर्चा करेंगे कि PHP घातक त्रुटियों को ठीक से कैसे पकड़ा जाए, सामान्य तरीके क्यों काम नहीं करते हैं, और अपने कोड को अधिक मजबूत कैसे बनाया जाए। यह केवल सिद्धांत नहीं है - हम कई वास्तविक उदाहरण लिखेंगे जिन्हें आप तुरंत अपनी परियोजनाओं पर लागू कर सकते हैं।

\n\n

try...catch E_ERROR से क्यों नहीं बचाता है?

\n\n

आइए तुरंत भ्रम दूर करें: PHP में try...catch अपवादों (Exceptions) को संभालने के लिए है। जबकि E_ERROR एक त्रुटि (Error) है। ये अलग-अलग संस्थाएँ हैं। PHP संस्करण 7.0 से पहले घातक त्रुटियों को पकड़ने की अनुमति नहीं देता था। PHP 7 से शुरू होकर, Error वर्ग आया, जो Exception की तरह, Throwable इंटरफ़ेस को लागू करता है। लेकिन इसका मतलब यह नहीं है कि कोई भी E_ERROR स्वचालित रूप से एक अपवाद बन जाता है। उदाहरण के लिए, मेमोरी खत्म होने की त्रुटि (Out of memory) या अस्तित्वहीन विधि को कॉल करना - ये अभी भी घातक त्रुटियाँ हैं जिन्हें हमेशा try...catch के माध्यम से नहीं पकड़ा जा सकता है।

\n\n

यहाँ एक सरल उदाहरण है:

\n\n
try {\n    $obj = new NonExistentClass(); // यह E_ERROR उत्पन्न करेगा\n} catch (Throwable $e) {\n    echo 'पकड़ा: ' . $e->getMessage();\n}
\n\n

PHP 7+ में यह कोड काम करेगा, क्योंकि Throwable में Error भी शामिल है। लेकिन यदि त्रुटि संकलन चरण (जैसे, सिंटैक्स त्रुटि) या shutdown-चरण में होती है - तो try...catch बेकार है।

\n\n

शीर्ष-3 PHP घातक त्रुटियाँ और उनसे कैसे बचें

\n\n

1. अस्तित्वहीन विधि या वर्ग को कॉल करना

\n\n

सबसे आम घातक त्रुटि Call to undefined method या Class not found है। यह तब होती है जब आप किसी ऐसी विधि को कॉल करने का प्रयास करते हैं जो मौजूद नहीं है, या किसी ऐसे वर्ग का उपयोग करते हैं जो शामिल नहीं है।

\n\n

कैसे बचें:

\n
    \n
  • हमेशा क्लास ऑटोलोडिंग का उपयोग करें (spl_autoload_register या Composer)।
  • \n
  • method_exists() के माध्यम से विधि के अस्तित्व की जाँच करें।
  • \n
\n\n
if (method_exists($object, 'someMethod')) {\n    $object->someMethod();\n} else {\n    // हैंडलिंग\n}
\n\n

2. मेमोरी ओवरफ्लो (Allowed memory size exhausted)

\n\n

त्रुटि Allowed memory size of X bytes exhausted एक घातक त्रुटि है जो तब होती है जब स्क्रिप्ट अनुमति से अधिक मेमोरी की खपत करती है। इसे सामान्य तरीके से नहीं पकड़ा जा सकता है।

\n\n

कैसे बचें:

\n
    \n
  • डेटाबेस क्वेरी को ऑप्टिमाइज़ करें।
  • \n
  • बड़े ऐरे को संसाधित करने के लिए जनरेटर (yield) का उपयोग करें।
  • \n
  • php.ini में या ini_set('memory_limit', '256M') के माध्यम से मेमोरी सीमा बढ़ाएँ।
  • \n
\n\n

3. निष्पादन टाइमआउट (Maximum execution time exceeded)

\n\n

हालाँकि यह त्रुटि हमेशा घातक नहीं होती है, कुछ कॉन्फ़िगरेशन में यह स्क्रिप्ट के निष्पादन को पूरी तरह से रोक देती है।

\n\n

कैसे बचें:

\n
    \n
  • लंबी स्क्रिप्ट के लिए set_time_limit(0) का उपयोग करें।
  • \n
  • भारी ऑपरेशन को भागों में विभाजित करें।
  • \n
\n\n

PHP घातक त्रुटि को कैसे पकड़ें: 3 सिद्ध तरीके

\n\n

अब मुख्य बात पर आते हैं। कई तकनीकें हैं जो आपको E_ERROR को पकड़ने और स्क्रिप्ट के समाप्त होने से पहले कोड निष्पादित करने की अनुमति देती हैं।

\n\n

तरीका 1. register_shutdown_function() का उपयोग करना

ब्लॉग

पुस्तक अनुशंसाएँ