पीएचपी एरर प्रबंधन

फीचर में, डिफ़ॉल्ट एरर एसेसिंग बहुत सरल है। एक संदेश ब्राउज़र को भेजा जाता है, इस संदेश में फ़ाइल नाम, रो नंबर और एरर डिस्क्रिप्शन होता है।

पीएचपी एरर प्रबंधन

स्क्रिप्ट और वेब अनुप्रयोग बनाने के दौरान, त्रुटि संभालना एक महत्वपूर्ण भाग है। अगर आपका कोड त्रुटि निरीक्षण कोड के बिना है, तो यह काफी अपेक्षानिर्भर लगता है और सुरक्षा जोखिमों को खोल देता है।

यह ट्यूटोरियल PHP में सबसे महत्वपूर्ण त्रुटि निरीक्षण तरीकों को पेश करता है。

हम विभिन्न त्रुटि संभालने के तरीकों को आपको समझाएंगे:

  • सरल "die()" बयान
  • अनुकूलित त्रुटि और त्रुटि ट्रिगर
  • त्रुटि रिपोर्टिंग

बुनियादी त्रुटि संभालना: die() फ़ंक्शन का उपयोग

पहला उदाहरण एक टेक्स्ट फ़ाइल खोलने के लिए साधारण स्क्रिप्ट को दिखाता है:

<?php
$file=fopen("welcome.txt","r");
?>

यदि फ़ाइल नहीं मिला, तो आपको इस तरह का त्रुटि मिलेगा:

चेतावनी: fopen(welcome.txt) [function.fopen]: नहीं खोल सका स्ट्रीम: 
कोई फ़ाइल या डिरेक्ट्री नहीं है C:\webfolder\test.php पर लाइन 2

उपयोगकर्ता को ऊपरी तरह का त्रुटि संदेश मिलने से बचने के लिए, हम फ़ाइल को अनुसंधान करने से पहले इसके अस्तित्व की जांच करते हैं:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
अन्यथा
 {
 $file=fopen("welcome.txt","r");
 }
?>

अब, यदि फ़ाइल मिलती नहीं है, तो आपको इस तरह का त्रुटि संदेश मिलेगा:

फ़ाइल नहीं मिला

पिछले कोड की तुलना में, ऊपरी कोड अधिक प्रभावी है क्योंकि यह त्रुटि के बाद स्क्रिप्ट को समाप्त करने के लिए एक साधारण त्रुटि संभालने की मैकेनिज्म का उपयोग करता है。

हालांकि, शूटिंग स्क्रिप्ट को समाप्त करना हमेशा उचित विधि नहीं है। आइये, हम त्रुटि को संभालने के लिए वैकल्पिक PHP फ़ंक्शन का अध्ययन करें।

अनुकूलित त्रुटि हैंडलर बनाना

एक अनुकूलित त्रुटि हैंडलर बनाना बहुत साधारण है। हमने एक विशेष फ़ंक्शन बनाया है जो PHP में त्रुटि होने पर फ़ंक्शन को आमंत्रित किया जा सकता है。

यह फ़ंक्शन कम से कम दो पारामीटर (त्रुटि स्तर और त्रुटि संदेश) को संभालने की क्षमता रखता है, लेकिन कुल मिलाकर पांच पारामीटर (वैकल्पिक: फ़ाइल, लाइन-नंबर और त्रुटि संदर्भ) को स्वीकार कर सकता है:

व्याकरण

error_function(error_level, error_message,
error_file, error_line, error_context)
पारामीटर वर्णन
error_level

आवश्यक है। उपयोगकर्ता द्वारा निर्धारित त्रुटि के लिए त्रुटि रिपोर्टिंग स्तर निर्धारित करें। यह एक मान के रूप में होना चाहिए。

नीचे दिए गए तालिका: त्रुटि रिपोर्टिंग स्तर को देखें。

error_message आवश्यक है। उपयोगकर्ता द्वारा निर्धारित त्रुटि के लिए त्रुटि संदेश निर्धारित किया जाता है。
error_file वृद्धि योग्य। त्रुटि को होने वाले फ़ाइल का नाम निर्धारित करे。
error_line वृद्धि योग्य। त्रुटि होने के लिए लाइन संख्या को निर्धारित करे。
error_context वृद्धि योग्य। एक सब-आयाम को निर्धारित करे, जो त्रुटि होने पर उपयोग करने वाली हर वेंडो और उनके मूल्यों को शामिल करता है。

त्रुटि रिपोर्टिंग स्तर

ये त्रुटि रिपोर्टिंग स्तर त्रुटि संभालनकर्ता को संभालने वाली विभिन्न प्रकार की त्रुटियों के लिए हैं:

मूल्य सत्त्व वर्णन
2 E_WARNING अघातक रन-टाइम त्रुटि। शैलीपुस्तक को रुकावट करता नहीं है。
8 E_NOTICE

रन-टाइम सूचना

शैलीपुस्तक त्रुटि हो सकती है, लेकिन यह शैलीपुस्तक के अनुच्छेद में सुचारु रूप से हो सकती है。

256 E_USER_ERROR घातक उपयोगकर्ता द्वारा उत्पन्न त्रुटि। E_ERROR के समान है, लेकिन डेवलपर द्वारा PHP फ़ंक्शन trigger_error() सेट की जाने वाली E_ERROR के समान है।
512 E_USER_WARNING अघातक उपयोगकर्ता द्वारा उत्पन्न चेतावनी। यह डेवलपर द्वारा PHP फ़ंक्शन trigger_error() सेट की जाने वाली E_WARNING के समान है।
1024 E_USER_NOTICE उपयोगकर्ता द्वारा उत्पन्न सूचना। यह डेवलपर द्वारा PHP फ़ंक्शन trigger_error() सेट की जाने वाली E_NOTICE के समान है।
4096 E_RECOVERABLE_ERROR कैबल किये गये घातक त्रुटियाँ। E_ERROR के समान, लेकिन उपयोगकर्ता-निर्धारित एसफ़ंक्शन द्वारा कैबल किये जा सकते हैं (देखें set_error_handler()).
8191 E_ALL

सभी त्रुटियाँ और चेतावनी, E_STRICT स्तर के अलावा。

(फायल 6.0 में E_STRICT E_ALL का हिस्सा है)

अब, एक त्रुटि संभालन फ़ंक्शन बनाएं:

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "स्क्रिप्ट समाप्त";
 die();
 }

उपरोक्त कोड एक सरल त्रुटि संभालन फ़ंक्शन है। जब यह ट्रिगर होता है, तो यह त्रुटि स्तर और त्रुटि संदेश प्राप्त करता है। फिर यह त्रुटि स्तर और संदेश आउटपुट करता है और शैलीपुस्तक को समाप्त करता है。

अब, हमने एक त्रुटि संभालन फ़ंक्शन बनाया है, हमें तय करना है कि जब इस फ़ंक्शन को ट्रिगर करना है।

सेट एरर हैंडलर

PHP का डिफ़ॉल्ट त्रुटि संभालनकर्ता बिन्दुबल्ली त्रुटि संभालनकर्ता है। हम उपरोक्त फ़ंक्शन को शैलीपुस्तक चलने के दौरान डिफ़ॉल्ट त्रुटि संभालनकर्ता बनाना चाहते हैं。

त्रुटि संभालन को बदल सकते हैं, ताकि शैलीपुस्तक अलग-अलग त्रुटियों को अलग-अलग तरीके से संभाल सके। लेकिन, इस मामले में, हम त्रुटियों के सभी के लिए हमारा त्रुटि संभालन प्रोग्राम इस्तेमाल करना चाहते हैं:

set_error_handler("customError");

क्योंकि हम अपने मनपसंद फ़ंक्शन को सभी त्रुटियों का संभालन करना चाहते हैं, set_error_handler() को केवल एक पैरामीटर की आवश्यकता है, दूसरा पैरामीटर त्रुटि स्तर निर्धारित करने के लिए जोड़ सकते हैं。

उदाहरण

अस्तित्व में नहीं होने वाले वेरियेबल को आउटपुट करने के लिए इस गलत संदेश संभालक का परीक्षण करें:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>गलत संदेश:</b> [$errno] $errstr";
 }
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>

इस कोड का आउटपुट इस तरह का होना चाहिए:

गलत संदेश: [8] अनिर्दिष्ट वेरियेबल: test

गलत संदेश ट्रिगर करना

स्क्रिप्ट में उपयोगकर्ता इनपुट डेटा के स्थान पर, जब उपयोगकर्ता का इनपुट अवैध होता है तो गलत संदेश ट्रिगर करने के लिए बहुत उपयोगी है।PHP में, इस कार्य को trigger_error() पूरा करता है。

उदाहरण

इस उदाहरण में, यदि "test" वेरियेबल "1" से बड़ा है, तो गलत संदेश होगा:

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

इस कोड का आउटपुट इस तरह का होना चाहिए:

सूचना: मूल्य 1 या नीचे होना चाहिए
in C:\webfolder\test.php on line 6

आप स्क्रिप्ट के किसी भी स्थान पर गलत संदेश ट्रिगर कर सकते हैं, दूसरे पारामीटर के जरिए, आप ट्रिगर किए गए गलत संदेश का स्तर निर्धारित कर सकते हैं。

संभावित गलत संदेश क़िस्में:

  • E_USER_ERROR - निर्वार्य उपयोगकर्ता द्वारा निर्मित रन-टाइम गलत संदेश।गलत संदेश बहाल नहीं किया जा सकता है।स्क्रिप्ट का निष्पादन बंद होता है。
  • E_USER_WARNING - अनवरणीय उपयोगकर्ता द्वारा निर्मित रन-टाइम चेतावनी।स्क्रिप्ट का निष्पादन बंद नहीं होता है。
  • E_USER_NOTICE - मूलभूत।उपयोगकर्ता द्वारा निर्मित रन-टाइम अधिसूचना।स्क्रिप्ट एक संभावित गलत संदेश का पालन करता है, या स्क्रिप्ट निष्पादन के दौरान सुचारू रहता है。

उदाहरण

इस उदाहरण में, यदि "test" वेरियेबल "1" से बड़ा है, तो E_USER_WARNING गलत संदेश होगा।यदि E_USER_WARNING होता है, तो हम अपने अनुकूलित गलत संदेश संभालक का उपयोग करेंगे और स्क्रिप्ट को समाप्त करेंगे:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "स्क्रिप्ट समाप्त";
 die();
 }
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>

इस कोड का आउटपुट इस तरह का होना चाहिए:

त्रुटि: [512] मान 1 या नीचे होना चाहिए
स्क्रिप्ट समाप्त

अब, हमने अपने आपको बनाने के तरीके सिखा लिए हैं और उन्हें ट्रिगर करने के तरीके सिखा लिए हैं, अब हम गलत संदेश रिकॉर्ड का अध्ययन करेंगे。

गलत संदेश रिकॉर्ड

मूलभूत रूप से, php.ini में error_log कॉन्फ़िगरेशन के अनुसार, PHP गलत संदेश रिकॉर्ड को सर्वर के गलत संदेश रिकॉर्ड सिस्टम या फ़ाइल को भेजता है।error_log() फ़ंक्शन का उपयोग करके, आप निर्दिष्ट फ़ाइल या दूरस्थ गंतव्य को गलत संदेश रिकॉर्ड भेज सकते हैं。

आपको अपने आपको ई-मेल के माध्यम से गलत संदेश भेजना, एक निर्दिष्ट गलत संदेश की अधिसूचना प्राप्त करने के लिए एक अच्छा तरीका है。

ई-मेल के माध्यम से गलत संदेश भेजना

इस उदाहरण में, यदि विशेष त्रुटि होती है, तो हम त्रुटि संदेश के साथ ई-मेल भेजेंगे और स्क्रिप्ट को समाप्त करेंगे:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Webmaster has been notified";
 error_log("Error: [$errno] $errstr",1,
 "someone@example.com","From: webmaster@example.com");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>

इस कोड का आउटपुट इस तरह का होना चाहिए:

त्रुटि: [512] मान 1 या नीचे होना चाहिए
वेबमास्टर को सूचित किया गया है

इस कोड से प्राप्त ई-मेल इस तरह का होता है:

त्रुटि: [512] मान 1 या नीचे होना चाहिए

यह विधि सभी त्रुटियों के लिए नहीं है।सामान्य त्रुटियों को सर्वदा PHP डिफ़ॉल्ट रिकॉर्डिंग सिस्टम के जरिए सर्वर पर दर्ज करना चाहिए。