گزارش خطا ( Error Reporting ) در PHP
گزارش خطا در PHP – یکی از مهم ترین مزایا برای برنامه نویس محسوب می شود که باعث بهبود کارایی برنامه و افزایش سرعت عمل پروژه ای است که بر روی آن کار می شود .
از این رو PHP مکانیزمی را برای برنامه نویس طراحی کرده که بتوان خطا ها را بر اساس نوع آن نمایش دهد یا حتی نمایش خطا را پنهان کند .
پیشنهاد می شود قبل از مطالعه این آموزش این مقالات را بررسی کنید .
آشنایی با توابع set_error_handler و trigger_error
برای گزارش خطا در PHP باید با توابعی که در جلوتر معرفی می شود آشنا شوید .
تابع trigger_error
این تابع می تواند به ارور هایی مثل warning ، notice ، E_ERROR نمایش دهد با این تفاوت که به عنوان USER_ERROR در نظر گرفته می شود یعنی :
E_WARNING با E_USER_WARNING فرق دارد در حالی که هر دو warning محسوب می شود .
این تابع دو آرگومان نیاز دارد که
1- پیغام خطایی که قصد نمایش آن را داریم
2- ( اختیاری ) نوع خطا ( پیشفرض E_USER_NOTICE ) می باشد که شبیه همان E_NOTICE است .
نمایش خطای Notice :
trigger_error('user notice error reporting !'); // یا trigger_error('user notice error reporting !', E_USER_NOTICE);
نمایش خطای Warning :
trigger_error('user warning error reporting !', E_USER_WARNING);
نمایش خطای ERROR (زیر مجموعه ای از fatal error) :
trigger_error('user error reporting !', E_USER_ERROR);
تابع set_error_handler
با استفاده از این تابع می توانید پیغام خطا را گرفته و به طور سفارشی که تمایل دارید آن را نمایش دهید .
اما تابع set_error_handler یکسری شرایط را دارد که فقط امکان دریافت اطلاعات این نوع خطاهای زیر را دارد :
1- E_USER_NOTICE
2- E_USER_WARNING
3- E_USER_ERROR
4- E_NOTICE
5- E_WARNING
تابع شامل 2 ورودی می باشد که :
1- نام تابعی که اطلاعات خطا به آن ارسال شود
آرگومان هایی که به تابع ارسال می شود 4 تا است .
1- کد خطا
2- پیغام خطا
3- نام اسکریپتی که خطا در آن رخ داده
4- لاین خطا
2- ( اختیاری ) نوع خطایی که دریافت کند ( پیشفرض E_ALL ) که شامل تمامی لیست بالا می شود .
function err_cbk($errcode, $errstr, $errfile, $errline) { $error_msg = "Error : [Line]: {$errline} [error]: {$errstr} [File]: {$errfile} [Error Code]: {$errcode}"; echo $error_msg; } set_error_handler('err_cbk' , E_USER_NOTICE); trigger_error('notice error !!!' , E_USER_NOTICE);
و خروجی که دریافت می شود به جای نمایش پیشفرض به این صورت :
Error : [Line]: 10 [error]: notice error !!! [File]: \index.php [Error Code]: 1024
می باشد . البته خروجی دریافتی شما ممکن است کمی فرق داشته باشد .
آشنایی با تابع error_reporting
با استفاده از این تابع می توانید تفکیک کنید که چه نوع خطا هایی نمایش و گزارش شود . با توجه به کانفیگ سرور ممکن است متفاوت باشد که معمولا تمامی ارور ها به جز Notice نمایش داده شود .
که با این تابع می توان این کانفیگ را تغییر داد .
این تابع یک ورودی دارد که آن هم برای نمایش چه نوع خطا هایی است .
دقت داشته باشید که Parse Error استثنا است و نمی توان از نمایش و گزارش آن چشم پوشی کرد .
هیچ خطایی نمایش داده نشود
error_reporting(0);
فقط مشابه fatal error ها نمایش داده شود
Exception , TypeError را می توان مشابه fatal دانست که خود آن هم شامل می شود .
error_reporting(E_ERROR);
فقط خطای Warning نمایش داده شود
error_reporting(E_WARNING);
فقط Parse Error نمایش داده شود
error_reporting(E_PARSE);
فقط خطای Notice نمایش داده شود
error_reporting(E_NOTICE);
تمامی خطا ها نمایش داده شود
error_reporting(-1);
همچنین از نسخه 5.4 PHP به بعد E_ALL هم همان کار 1- را انجام می دهد .
error_reporting(E_ALL);
تمامی خطا ها به جز Notice نمایش داده شود
error_reporting(E_ALL & ~E_NOTICE);
منبع : PHP.NET
ارسال نظر