آموزش PHP > مدیریت خطا در PHP > طراحی مدیریت کننده خطاها
( error handler )
ایجاد یک مدیریت کننده خطا در PHP :
ساخت یک مدیریت کننده خطا نسبتا ساده است . به طور معمول ، تابعی را طراحی می کنیم
تا در هنگام بروز خطا در صفحه ، فراخوانی شود .
تابع طراحی شده بایستی حداقل دو پارامتر ورودی را دریافت و مدیریت کند :
- شدت اهمیت خطا ( error level ) .
- پیام خطا ( error message ) .
همچین چندین پارامتر اختیاری نیز می تواند داشته باشد :
- نام فایل ( file name ) .
- شماره خطی از برنامه که خطا در آن رخ داده است ( line number ) .
- محتوای خطا ( error context ) .
شکل کلی یک تابع طراحی شده برای مدیریت خطا در PHP می تواند به صورت زیر باشد :
|
syntax
|
error_function ( error_level , error_message , error_file , error_line , error_context
) ;
|
در جدول زیر به تشریح پارامترهای کد فوق و استفاده آنها پرداخته شده است :
|
توضیح
|
این پارامتر شدت اهمیت خطا را تعیین می کند . یک مقدار عددی است و شرح موارد آن در
جدول راهنمای شماره 1 آمده است .
استفاده از این پارامتر اجباری است .
|
این پارامتر پیام خطا را که حاوی اطلاعاتی راجع به آن است را تعیین می کند .
استفاده از این پارامتر اجباری است .
|
این پارامتر نام فایلی که خطا در آن رخ داده است ، را مشخص می کند .
استفاده از این پارامتر اختیاری است .
|
این پارامتر شماره خطی که خطا در آن رخ داده است را مشخص می کند .
استفاده از این پارامتر اختیاری است .
|
این پارامتر نیز تمامی متغیرها و مقدارهایشان که در کد برنامه ای که خطا در آن رخ داده
است را شامل می شود .
استفاده از این پارامتر اختیاری است .
|
جدول راهنمای شماره 1 : جدول زیر انواع مقادیر مختلف برای شدت
اهمیت خطای رخ داده و توضیحات آنها را نشان می دهد :
|
توضیح
|
|
خطا با شدت اهمیت کم بوده و مانع اجرای اسکریپت نخواهد شد .
|
|
پیام خطا یک اعلان مشکل . برنامه ممکن است ایرادی پیدا کرده باشد که از نظرش خطاست
، ولی مشکل خاصی ایجاد نمی کند .
|
|
این خطا یک خطا مهم بوده و توسط کاربر پیش بینی شده است . به احتمال زیاد اجرای روند
اسکریپت را متوقف می کند .
|
|
یک پیام اخطار معمولی که معمولا باعث توقف اجرای اسکریپت نشده و توسط طراح پیش بینی
شده است .
|
|
یک اعلان بروز خطا یا مشکل معمولی که توسط طراح پیش بینی شده است .
|
|
یک خطای مهم و از کار اندازنده ، که قابل پیش بینی و مدیریت می باشد . معمولا این خطا
توسط یک مدیریت کننده خطا طراحی شده توسط طراح برنامه ، شناسایی می شود .
|
|
همه نوع خطا و اخطار را شامل می شود .
|
نحوه طراحی یک مدیریت کننده خطا :
تابع زیر یک مدیریت کننده خطای معمولی را نشان می دهد که میزان شدت اهمیت خطا و پیام
آن را در خروجی چاپ می کند :
|
syntax
|
function customError( $errno , $errstr )
{
echo "Error : [$errno] $errstr ";
echo "Ending Script";
die( );
}
|
هنگامی که خطایی رخ می دهد ، تابع فوق شدت اهمیت خطا را توسط پارامتر $errno و پیام
خطا را توسط پارامتر $errstr دریافت کرده و در خروجی نشان می دهد .
اکنون که تابع مدیریت خطا را طراحی کردیم ، باید کد فراخوان آن را در جاهایی که می
خواهیم ، قرار داده تا در صورت بروز خطا ، تابع فوق فراخوانی شود .
تنظیم فراخوان کننده تابع مدیریت خطا ( event handler ) :
مدیریت کننده پیش فرض برای خطا در PHP تعیین شده است . اما در مثال این بخش ، ما قصد
داریم تا تابعی به نام ( ) customError را که خود برای اجرا در زمان بروز خطا ، طراحی کرده
ایم را به عنوان مدیریت کننده پیش فرض خطا قرار دهیم .
لازم به ذکر است که این امکان وجود دارد تا شما برای هر بخش از کد یا دسته ای از توابع
یک مدیریت کننده خطا پیش فرض تعیین کنید ، تا در مواقع مختلف بروز خطا ، به گونه های
مختلف با آن برخورد نمایید .
اما در این مثال به وسیله تابع ( ) set_error_handler ، ما تابع
( ) customError را به
عنوان مدیریت کننده خطای پیش فرض اسکریپت تعیین کرده ایم :
|
syntax
|
set_error_handler( " customError " ) ;
|
مثال عملی کاملتر :
مثال : در مثال زیر ، پس از اینکه تابع مدیریت کننده خطا پیش فرض
را برای برنامه تعیین کردیم ، در خط آخر مثال ، به برنامه دستور داده ایم تا مقدار
متغیری که تعریف نشده است را چاپ کند !! این کار باعث بروز یک خطا شده و تابع مدیریت
خطا را فراخوانی می کند :
|
syntax
|
<?php
// تابع مدیریت کننده خطا
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
// تعیین تابع پیض فرض برای مدیریت خطا
set_error_handler("customError");
// بروز و فراخوانی خطا
echo($test);
?>
|
پس از اجرای کد فوق و بروز خطا ، پیام زیر به عنوان پیام خطا توسط تابع
( ) customError
اعلام می شود .
|
syntax
|
Error : [8] Undefined variable : test
|
راجع این مطلب
سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...
>>>>> ورود به انجمن تخصصی
نطر خودتان درباره این صفحه :