گزارش خطا ( Error Reporting ) در PHP

گزارش خطا ( 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

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us