وباکا

آموزش تخصصی برنامه نویسی وب

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

پردازش خطا 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

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

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

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

File not found

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

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

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

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

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

شکل کلی تابع:

error_function(error_level,error_message,
error_file,error_line,error_context)

پارامترهای آن بصورت زیر هستند:

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

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

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

مقدار ثابت شرح
2 E_WARNING اشتباهات زمان اجرای غیرقطعی، اجرای اسکریپت متوقف نشده است
8 E_NOTICE اعلان های زمان اجرا. اسکریپت چیزی را پیدا کرد که ممکن است خطایی باشد، اما می تواند هنگام اجرای یک اسکریپت به طور معمول رخ دهد
256 E_USER_ERROR خطای تولید شده توسط کاربر غیر مهلک است. مثل E_ERROR است که با استفاده از تابع پی اچ پیtrigger_error توسط برنامه نویس تعیین می شود
512 E_USER_WARNING هشدار ایجاد شده توسط کاربر و قابل چشم چوشی. مثل E_WARNING است که با استفاده از تابع پی اچ پیtrigger_error توسط برنامه نویس تعیین می شود.
1024 E_USER_NOTICE اطلاعیه تولید شده توسط کاربر. این مانند E_NOTICE استکه با استفاده از تابع پی اچ پیtrigger_error توسط برنامه نویس تعیین می شود.
4096 E_RECOVERABLE_ERROR خطای قابل فهم مهلکاست مث E_ERROR است اما می تواند توسط یک دسته تعریف شده توسط کاربر گرفته شود
8191 E_ALL همه خطاها و هشدارها (E_STRICT بخشی از E_ALL در PHP 5.4 شد)

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

function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}

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

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

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

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

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

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

در این بخش با روش تعریف و استفاده از تابع پردازشگر خطا در پی اچ پی آشنا شدید، در گام بعدی تعریف تریپرها و گزارش خطاها را آموزش خواهیم داد.

دیدگاهتان را بنویسید

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

فهرست مطالب