رفتن به مطلب

طراحی مدیریت کننده خطاها ( error handler )


lion

پست های پیشنهاد شده

ساخت یک مدیریت کننده خطا نسبتا ساده است . به طور معمول ، تابعی را طراحی می کنیم تا در هنگام بروز خطا در صفحه ، فراخوانی شود .

تابع طراحی شده بایستی حداقل دو پارامتر ورودی را دریافت و مدیریت کند :

 

شدت اهمیت خطا ( error level ) .

پیام خطا ( error message ) .

همچین چندین پارامتر اختیاری نیز می تواند داشته باشد :

 

نام فایل ( file name ) .

شماره خطی از برنامه که خطا در آن رخ داده است ( line number ) .

محتوای خطا ( error context ) .

شکل کلی یک تابع طراحی شده برای مدیریت خطا در PHP می تواند به صورت زیر باشد :

 

 

error_function ( error_level , error_message , error_file , error_line , error_context ) ;

 

 

error_level

این پارامتر شدت اهمیت خطا را تعیین می کند . یک مقدار عددی است و شرح موارد آن در جدول راهنمای شماره 1 آمده است .

استفاده از این پارامتر اجباری است .

error_message

این پارامتر پیام خطا را که حاوی اطلاعاتی راجع به آن است را تعیین می کند .

استفاده از این پارامتر اجباری است .

error_file

این پارامتر نام فایلی که خطا در آن رخ داده است ، را مشخص می کند .

استفاده از این پارامتر اختیاری است .

error_line

این پارامتر شماره خطی که خطا در آن رخ داده است را مشخص می کند .

استفاده از این پارامتر اختیاری است .

error_context

این پارامتر نیز تمامی متغیرها و مقدارهایشان که در کد برنامه ای که خطا در آن رخ داده است را شامل می شود .

استفاده از این پارامتر اختیاری است .

 

جدول راهنمای شماره 1 : جدول زیر انواع مقادیر مختلف برای شدت اهمیت خطای رخ داده و توضیحات آنها را نشان می دهد :

 

 

 

پارامتر پارامتر توضیح

2 E_WARNING خطا با شدت اهمیت کم بوده و مانع اجرای اسکریپت نخواهد شد .

8 E_NOTICE پیام خطا یک اعلان مشکل . برنامه ممکن است ایرادی پیدا کرده باشد که از نظرش خطاست ، ولی مشکل خاصی ایجاد نمی کند .

256 E_USER_ERROR این خطا یک خطا مهم بوده و توسط کاربر پیش بینی شده است . به احتمال زیاد اجرای روند اسکریپت را متوقف می کند .

512 E_USER_WARNING یک پیام اخطار معمولی که معمولا باعث توقف اجرای اسکریپت نشده و توسط طراح پیش بینی شده است .

1024 E_USER_NOTICE یک اعلان بروز خطا یا مشکل معمولی که توسط طراح پیش بینی شده است .

4096 E_RECOVERABLE_ERROR یک خطای مهم و از کار اندازنده ، که قابل پیش بینی و مدیریت می باشد . معمولا این خطا توسط یک مدیریت کننده خطا طراحی شده توسط طراح برنامه ، شناسایی می شود .

8191 E_ALL همه نوع خطا و اخطار را شامل می شود .

نحوه طراحی یک مدیریت کننده خطا :

 

تابع زیر یک مدیریت کننده خطای معمولی را نشان می دهد که میزان شدت اهمیت خطا و پیام آن را در خروجی چاپ می کند :

 

 

function customError( $errno , $errstr )  {     echo "Error : [$errno] $errstr ";     echo "Ending Script";     die( );  }

 

 

هنگامی که خطایی رخ می دهد ، تابع فوق شدت اهمیت خطا را توسط پارامتر $errno و پیام خطا را توسط پارامتر $errstr دریافت کرده و در خروجی نشان می دهد .

اکنون که تابع مدیریت خطا را طراحی کردیم ، باید کد فراخوان آن را در جاهایی که می خواهیم ، قرار داده تا در صورت بروز خطا ، تابع فوق فراخوانی شود .

 

تنظیم فراخوان کننده تابع مدیریت خطا ( event handler ) :

 

مدیریت کننده پیش فرض برای خطا در PHP تعیین شده است . اما در مثال این بخش ، ما قصد داریم تا تابعی به نام ( ) customError را که خود برای اجرا در زمان بروز خطا ، طراحی کرده ایم را به عنوان مدیریت کننده پیش فرض خطا قرار دهیم .

لازم به ذکر است که این امکان وجود دارد تا شما برای هر بخش از کد یا دسته ای از توابع یک مدیریت کننده خطا پیش فرض تعیین کنید ، تا در مواقع مختلف بروز خطا ، به گونه های مختلف با آن برخورد نمایید .

اما در این مثال به وسیله تابع ( ) set_error_handler ، ما تابع ( ) customError را به عنوان مدیریت کننده خطای پیش فرض اسکریپت تعیین کرده ایم :

 

 

set_error_handler( " customError " ) ;

 

 

مثال عملی کاملتر :

 

مثال : در مثال زیر ، پس از اینکه تابع مدیریت کننده خطا پیش فرض را برای برنامه تعیین کردیم ، در خط آخر مثال ، به برنامه دستور داده ایم تا مقدار متغیری که تعریف نشده است را چاپ کند !! این کار باعث بروز یک خطا شده و تابع مدیریت خطا را فراخوانی می کند :

 

 

<?php  // تابع مدیریت کننده خطا function customError($errno, $errstr)   {     echo "<b>Error:</b> [$errno] $errstr";   } // تعیین تابع پیض فرض برای مدیریت خطا set_error_handler("customError"); // بروز و فراخوانی خطا echo($test);?>

 

 

پس از اجرای کد فوق و بروز خطا ، پیام زیر به عنوان پیام خطا توسط تابع ( ) customError اعلام می شود .

 

 

Error : [8] Undefined variable : test

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

مهمان
این موضوع برای عدم ارسال قفل گردیده است.
×
×
  • اضافه کردن...