میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

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

مدیریت خطا در 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

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

مثال : 

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

به هر حال متوقف کردن اسکریپت به این سادگی همیشه راه مناسبی نیست.

ایجاد یک مدیریت کننده خطا سفارشی

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

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

ساختار تابع:

 

پارامترتوضیحات
error_levelسطح گزارش خطا برای خطایی که کاربر تعریف کرده را مشخص می کند.باید مقداری عددی باشد.در جدول زیر سطوح گزارش خطا احتمالی آمده است
error_messageپیام خطا را مشخص می کند
error_fileنام فایلی را که خطا در آن اتفاق افتاده است را مشخص می کند
error_lineشماره خطی را که خطا در آن اتفاق افتاده است را مشخص می کند.
error_contextیک آرایه از متغیر ها و مقادیرشان که در هنگام رخ دادن خطا استفاده می شدند را مشخص می کند.

 

سطوح گزارش خطا

توضیحاتثابتمقدار
خطاهای کم اهمیت زمان اجرا. اجرای اسکریپت متوقف نمی شودE_WARNING۲
اطلاعیه های زمان اجرا. اسکریپت در زمان اجرا چیزی را پیدا می کند که می تواند خطا باشد. معمولا در هنگام اجرای اسکریپت اتفاق می افتدE_NOTICE۸
خطای خطرناک تولید شده توسط کاربر. مانند یک نوع E_ERROR می باشد که توسط برنامه نویس با تابع ()trigger_error به وجود آمده استE_USER_ERROR۲۵۶
هشدار کم اهمیت تولید شده توسط کاربر. مانند یک نوع E_WARNING می باشد که توسط برنامه نویس با تابع ()trigger_error به وجود آمده استE_USER_WARNING۵۱۲
اطلاعیه تولید شده توسط کاربر. مانند یک نوع E_NOTICE می باشد که توسط برنامه نویس با تابع ()trigger_error به وجود آمده استE_USER_NOTICE۱۰۲۴
خطای خطرناک قابل گرفتن. مانند یک E_ERROR است اما می تواند توسط مدیریت کاربر تعریف شده گرفتار شوذ.E_RECOVERABLE_ERROR۴۰۹۶
تمامی خطا ها و هشدار هاE_ALL۸۱۹۱

حالا بیاید یک تابع برای مدیریت خطاها ایجاد کنیم:

مثال : 

کد بالا یک تابع مدیریت خطا ساده است. وقتی فراخوانده شد، سطح خطا و پیغام خطا را دریافت می کند.
سپس دوباره سطح خطا و پیام خطا را چاپ کرده و اسکریپت را متوقف می کند.

حالا که تابع مدیریت خطا را ساختیم باید تصمیم بگیریم که چه موقع آن را به کار بگیریم.

 

تنظیم مدیریت کننده خطا

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

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

مثال : 
set_error_handler(“customError”);

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

مثال

می خواهیم تابع را نوسط چاپ متغیری که وجود ندارد امتحان کنیم:

مثال : 

<?php
//error handler function
function customError($errno, $errstr) {
echo “<b>Error:</b> [$errno] $errstr”;
}

//set error handler
set_error_handler(“customError”);

//trigger error
echo($test);
?>

خروجی به شکل زیر می باشد:

مثال : 
Error: [8] Undefined variable: test

راه اندازی یک خطا

وقتی کاربر می تواند داده هایی را وارد کند، بهتره که وقتی ورودی غیر مجاز وارد کرد یک خطا توسط تابع ()trigger_error به راه بیاندازیم.

مثال

خروجی به شکل زیر می باشد:

مثال : 
Notice: مقدار باید یک یا کمتر از یک باشد
in C:\webfolder\test.php on line 6

انواع خطا ممکن:

  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE

 

مثال

در مثال زیر اگر متغیر test$ بزرگتر از ۱ باشد یک E_USER_WARNING رخ می دهد:

مثال : 

<?php
//error handler function
function customError($errno, $errstr) {
echo “<b>Error:</b> [$errno] $errstr<br>”;
echo “Ending Script”;
die();
}

//set error handler
set_error_handler(“customError”,E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
trigger_error(“مقدار باید یک یا کمتر از یک باشد”,E_USER_WARNING);
}
?>

خروجی به شکل زیر است:

مثال : 
Error: [512] مقدار باید یک یا کمتر از یک باشد
Ending Script

 

ارسال یک پیام خطا با ایمیل

در مثال زیر ما یک ایمیل محتوی پیام خطا را ارسال می کنیم:

مثال : 

<?php
//error handler function
function customError($errno, $errstr) {
echo “<b>Error:</b> [$errno] $errstr<br>”;
echo “Webmaster has been notified”;
error_log(“Error: [$errno] $errstr”,1,
“someone@example.com”,”From: webmaster@example.com”);
}

//set error handler
set_error_handler(“customError”,E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
trigger_error(“مقدار باید یک یا کمتر از یک باشد”,E_USER_WARNING);
}
?>

خروجی کد بخ شکل زیر می باشد:

Error: [512] مقدار باید یک یا کمتر از یک باشد
Webmaster has been notified

و ایمیل دریافتی باید حاوی پیام زیر باشد:

Error: [512] مقدار باید یک یا کمتر از یک باشد


 

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟