مدیریت خطا در PHP
مدیریت خطا در PHP

مدیریت خطاهای احتمالی در کدها و اسکریپت های PHP ساده و روان است . در حالت پیش فرض یک پیام خطا همراه با نام فایلی که خطا در آن رخ داده ، شماره خط خطا و پیامی که تشریح کننده خطا است ، به مرورگر ارسال می شود .

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

در زمان نوشتن اسکریپت ها و برنامه های تحت وب ، مدیریت خطا یک بخش مهم به حساب می آید . اگر کد شما ، نقص مدیریت خطا داشته باشد ، برنامه طراحی شده بسیار مبتدی به نظر آمده و خطراتی ممکن است آن را تهدید نماید .
در این بخش مهمترین و پرکاربردترین متدهای مدیریت خطادر PHP را بررسی می کنیم ، که عبارتند از :

  • تابع ساده ( ) die .
  • برخورد با خطاهای گوناگون و فعال کننده های خطا .
  • گزارش دهی خطا .

ساده ترین روش مدیریت خطا در PHP – تابع ( ) die :

نحوه کار با تابع ( ) die را با یک مثال ساده نمایش می دهیم .
کد زیر یک مثال ساده را نشان می دهد که یک فایل متنی را باز می کند :

مثال:

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

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

پیام خطا:

 Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

برای جلوگیری از صدور پیام خطایی مشابه پیام فوق ، کدی را طراحی می کنیم تا ابتدا وجود یا عدم وجود فایل مورد نظر را بررسی کرده و سپس دستور مناسب را اجرا نماید :

کد تابع ( ) die :

 <?php 
if( !file_exists( "welcome.txt" ) )
{
die("File not found");
}
else
{
$file = fopen( "welcome.txt" , "r" );
}
?>

حال اگر در باز کردن فایل مورد نظر ، خطایی رخ دهد ، به جای پیام طولانی فوق ، پیام ملموس و کوتاه زیر نمایش داده می شود :

پیام خطای جدید:

 File not found

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

ایجاد یک مدیریت کننده خطا در PHP :

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

  • شدت اهمیت خطا ( 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: این پارامتر شدت اهمیت خطا را تعیین می کند . یک مقدار عددی است و شرح موارد آن در جدول راهنمای شماره ۱ آمده است. استفاده از این پارامتر اجباری است. این پارامتر پیام خطا را که حاوی اطلاعاتی راجع به آن است را تعیین می کند .
error_message: استفاده از این پارامتر اجباری است. این پارامتر نام فایلی که خطا در آن رخ داده است ، را مشخص می کند. استفاده از این پارامتر اختیاری است .
error_line: این پارامتر شماره خطی که خطا در آن رخ داده است را مشخص می کند. استفاده از این پارامتر اختیاری است. این پارامتر نیز تمامی متغیرها و مقدارهایشان که در کد برنامه ای که خطا در آن رخ داده است را شامل می شود .
error_context: استفاده از این پارامتر اختیاری است .
نحوه طراحی یک مدیریت کننده خطا :

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

 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

تابع ( ) error_trigger:

در این بخش کار با تابع ( ) error_trigger را فرا خواهید گرفت . از تابع ( ) error_trigger در زمانی استفاده می شود که بروز خطا را پیش بینی کرده و کد لازم را برای مدیریت آن تعیین می کنیم .
کار با این تابع را در قالب یک مثال آموزش می دهیم . معمولا خطا در جاهایی که از کاربر ورودی دریافت می کنید ، احتمال زیادی دارد ، که رخ دهد . مثلا کاربر مقادیر غیر مجاز وارد نماید .
در مثالی زیر کدی طراحی کرده ایم تا در صورتی که مقدار متغیر test$ از ۱۰ بیشتر بود ، یک پیام خطا توسط رویداد ( ) error_trigger صادر شود .

مثال :

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

 

خروجی این خطا ، به صورت زیر خواهد بود :

 Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

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

در کد زیر ، به علت اینکه تابع ( ) customError را به عنوان تابع مدیریت کننده پیش فرض کد تعریف کرده ایم ، در هنگام بروز خطا ، تابع ( ) error_trigger پارامترهای لازم را درباره خطا به تایع ( ) customError فرستاده و این بار این تابع خروجی خطا را اعلام کرده و آن را مدیریت می کند :

<?php
// تابع مدیریت کننده خطا
function customError( $errno , $errstr )
{
echo "Error: [$errno] $errstr<br>";
echo "Ending Script";
die( );
}

// تعیین تابع مدیریت کننده پیش فرض
set_error_handler( "customError",E_USER_WARNING ) ;

// بروز خطا و ارسال پارامترهای لازم 
$test = 20 ;
if ( $test > 10 )
{
trigger_error( "Value must be 10 or below",E_USER_WARNING ) ;
}
?>

 

خروجی کد ، این بار به صورت زیر خواهد بود :

 Error: [512] Value must be 10 or below
Ending Script

 

تابع ( ) error_log:

به صورت پیش فرض ، PHP یک پیام حاوی اطلاعات خطا رخ داده را به سیستم logging سرور یا یک فایل خاص ، بسته به اینکه فایل php.ini ، بر روی سرور چگونه تنظیم شده باشد ، ارسال می کند .
به وسیله تابع ( ) error_log ، می توانید پیام های خطا رخ داده را به یک فایل خاص یا به ایمیل کاربر ارسال نمایید . ارسال یک ایمیل حاوی اطلاعات خطا می تواند یکی از کارآمدترین روش ها باشد . البته فقط این کار را برای خطاهای مهم و از کار اندازنده انجام دهید ، نه هر خطای معمولی ! .
در مثال زیر ، نحوه استفاده از تابع ( ) error_log را در عمل نمایش داده و در صورت بروز خطا ، ایمیلی حاوی اطلاعات آن به آدرس ایمیل کاربر ، ارسال می شود :

مثال:

 <?php 
// تابع مدیریت کننده خطا و فرستنده ایمیل
function customError($errno, $errstr)
{
echo " Error: [$errno] $errstr<br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1, " someone@example.com " , " From: webmaster@example.com " ) ;
}

// تعیین تابع پیش فرض خطا
set_error_handler("customError",E_USER_WARNING);

// مکان بروز خطا
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

خروجی خطای رخ داده در سیستم به صورت زیر خواهد بود :

Error: [512] Value must be 1 or below
Webmaster has been notified

همچین کاربر ایمیلی با محتویات زیر را دریافت خواهد کرد :

Error: [512] Value must be 1 or below

مرجع توابع مدیریت خطا در PHP :

در این بخش مهمترین و پرکاربردترین توابع زبان PHP برای مدیریت خطاهای رخ داده در برنامه را معرفی کرده ایم . برای دریافت اطلاعات بیشتر بر روی نام هر تابع کلیک نمایید :
به وسیله این توابع می توانید خطاهای رخ داده در کدهای PHP را شناسایی و مدیریت کرده و اطلاعات مربوط به آنها را در log سرور ذخیره کرده و یا برای ایمیل کاربر ارسال نمایید .
نکته : تمامی توابع مدیریت خطای PHP ، به صورت پیش فرض بر روی سرورهای این زبان نصب شده و نیاز به هیچ نصب اضافه ای نیست .

debug_backtrace ( ) این تابع اطلاعات کاملی راجع به خطای رخ داده را ، به صورت یک آرایه نمایش می دهد .
error_get_last ( ) این تابع اطلاعات آخرین خطای رخ داده در کد برنامه را بر می گرداند .
error_log ( ) این تابع اطلاعات خطاهای رخ داده در صفحه را در یک فایل بر روی سرور ذخیره کرده و یا به ایمیل کاربر ارسال می کند .
error_reporting ( ) این تابع مشخص می کند که چه خطاهایی به سیستم گزارش شوند .
set_error_handler ( ) این تابع یک تابع را به عنوان تابع پیش فرض برای مدیریت خطاها در صفحه تعیین می کند .
set_exception_handler ( ) این تابع ، یک تابع تعیین شده از سوی طراح را به عنوان تابع مدیریت کننده استثناها در صفحه تعیین می کند .
trigger_error ( ) این تابع برای شناسایی یک خطا یا فراخوانی تابع مربوط به آن به کار می رود .
user_error ( ) این تابع برای شناسایی یک خطا یا فراخوانی تابع مربوط به آن به کار می رود . عملکرد آن همانند تابع ( ) trigger_error است .

دیدگاه‌ خود را بیان کنید

اشتراک در
اطلاع از
guest

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید0
There are no products in the cart!