مشخصات مقاله
-
2649
-
0.0
-
12284
-
0
-
0
آموزش مدیریت خطا (Error Handling) در PHP
آموزش مدیریت خطا (Error Handling) در PHP :
سیستم مدیریت خطای پیش فرض یا default error handling در PHP بسیار ساده عمل می کند. این سیستم در هنگام بروز خطا، یک پیام هشدار حاوی نام فایل، شماره خط بروز خطا به همراه توصیفی از شرح خطا را به مرور گر ارسال می کند.
در هنگام طراحی اسکریپت ها و نرم افزارهای تحت وب، مدیریت خطا یا errorHandling بخش مهمی از کد می باشد. اگر کد شما نتواند error های احتمالی را چک کند، برنامه تان بسیار غیر حرفه ای به نظر رسیده و می تواند شما را با چالش های امنیتی رو به رو کند.
در این بخش آموزش PHP، مهم ترین متدهای چک کردن خطا در زبان PHP را بررسی خواهیم کرد. این متدهای مدیریت خطا عبارتند از :
- دستورهای ساده با تابع “die()”.
- error های خاص و بررسی تحریک کننده خطا (error triggers).
- آموزش نحوه گزارش کردن خطاها یا (error reporting).
آموزش روش پایه مدیریت خطا PHP-تابع die() :
در کد مثال اول مدیریت خطا، به وسیله اسکریپت زیر برنامه قصد دارد تا یک فایل متنی (text file) را باز کند :
اگر در کد فوق، فایل مورد نظر وجود نداشته باشد، احتمالا با خطاهایی هماند متن زیر مواجه خواهید شد :
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
برای جلوگیری از نمایش پیغام خطایی مثل متن فوق به کاربر، کد را به صورت زیر تغییر داده ایم. در این کد جدید ابتدا برنامه وجود فایل را بررسی کرده و سپس در صورت موجود بودن آن، اقدام به باز کردن فایل می کند:
حال اگر فایل مورد نظر وجود نداشته باشد، برنامه پیغام خطای زیر را صادر می کند :
File not found
کد روش دوم خطایابی، بسیار بهتر و تاثیرگذارتر از روش اول است. زیرا با استفاده از یک مکانیزم ساده خطایابی، قبل از بروز خطا، اسکریپت را از ادامه کار متوقف می کند.
اما، همواره متوقف کردن اسکریپت از ادامه اجرا، روش خوبی برای مدیریت خطا نیست. در ادامه به گزینه های دیگری که زبان PHP برای مدیریت خطا در اختیارمان قرار داده است، خواهیم پرداخت.
ایجاد یک مدیریت کننده خطا دلخواه (Custom Error Handling) :
ایجاد یک مدیریت کنده دلخواه خطا (Custom Error Handling) در زبان PHP، کار نسبتا ساده ای است. می توانیم به راحتی یک تابع دلخواه PHP را ایجاد کنیم تا در هنگام بروز خطا، فراخوانی شود.
تابع دلخواهی که برای مدیریت خطا ایجاد می کنیم، بایستی حداقل بتواند دو پارامتر خطا (درجه خطا (error level) و پیام خطا (error message)) را مدیریت کند و تا پارامتر اختیاری را دریافت کند (پارامترهای اختیاری مثل نام فایل، شماره خط کد بروز خطا و محتویات خطا).
ساختار کلی تعریف یک تابع مدیریت کننده دلخواه در PHP به صورت زیر است :
error_function(error_level,error_message,error_file,error_line,error_context)
جدول درجه های خطا در PHP :
در بخش قبل گفتیم که هر خطای رخ داده در برنامه های PHP شامل یک درجه یا level است که درجات آن را در لیست زیر مشاهده می کنید :
اکنون بیایید یک تابعی ایجاد کنیم تا خطاهای موجود را مدیریت یا handle کند. کد تابع به صورت زیر است :
function customError($errno, $errstr) {
echo "Error: [$errno] $errstr
";
echo "Ending Script";
die();
}
کد فوق یک تابع ساده مدیریت خطا (Error Handler) را نشان داده که در زمان فراخوانی شدن دو مقدار دریافت می کند. یک مقدار درجه خطا (error level) و دیگر پیام مرتبط با خطا (error message) . سپس تابع درجه و پیام خطا را در خروجی نشان داده و اجرای اسکریپت را متوقف می کند.
اکنون که یک تابع مدیریت کننده خطا را طراحی کردیم، بایستی تعیین کنیم چه زمانی لازم است این تابع فراخوانی و اجرا (trigger) شود.
آموزش تنظیم تابع مدیریت خطا در PHP :
تابع مدیریت خطای پیش فرض در PHP یک تابع پیش ساخته است که در سورس اصلی این زبان تعریف شده. در این درس قصد داریم تا تابعی که خودمان طراحی کردیم را به عنوان تابع پیش فرض مدیریت خطا در برنامه قرار دهیم.
این امکان نیز وجود دارد که یک تابع مدیریت خطا را به گونه ای تنظیم کنیم تا فقط برای برخی error ها اجرا شود، در این صورت می توان error های مختلف را به روش های گوناگون مدیریت کرد. اما در مثال عملی این درس، قصد داریم تابع خود را برای مدیریت تمامی خطاهای برنامه تنظیم کنیم :
set_error_handler("customError");
از آنجایی که می خواهیم تابع مدیریت خطای دلخواه ما، تمامی error های احتمالی برنامه را مدیریت کند، تابع set_error_handler() فقط به یک پارامتر نیاز خواهد داشت و در پارامتر دوم می توان درجه خطا را تنظیم کرد.
مثال عملی :در کد مثال عملی زیر، قصد داریم تا تابع مدیریت خطا را با تلاش برای چاپ مقدار یک متغیر که وجود ندارد، امتحان کنیم :
Error: [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
خروجی کد مثال فوق به صورت زیر خواهد بود :
Error: [8] Undefined variable: test
فعال کردن یک خطا یا error trigger :
در اسکریپت هایی که کاربر می تواند اطلاعاتی را درون کادرهای متن وارد کند، فعال کردن error ها در زمان ارسال مقادیر غیر مجاز بسیار کاربردی است. در زبان PHP این کار با استفاده از تابع trigger_error() انجام می شود.
مثال عملی :در کد مثال عملی زیر، در صورتی که مقدار متغیر “test” بیشتر از یک باشد، خطا مورد نظر فعال می شود :
=1) {
trigger_error("Value must be 1 or below");
}
?>
خروجی کد مثال فوق به صورت زیر خواهد بود :
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6
یک error دلخواه را می توان در هر کجای اسکریپت که لازم باشد، فراخوانی کرده و پارامتر دوم در تابع تعیین کننده درجه خطا (error level) می باشد. انواع مختلف error های محتمل عبارتند از :
در این حالت اسکریپت ممکن است به موردی برخورد کرده باشد که از نظر آن خطا بوده، ولی امکان دارد در هنگام اجرای برنامه به صورت عادی رخ دهد.
مثال عملی :در کد مثال عملی زیر، در صورتی که مقدار متغیر “test” از بیشتر باشد، یک E_USER_WARNING رخ خواهد داد. اگر E_USER_WARNING رخ دهد، ما از تابع مدیریت خطای مورد نظر خود استفاده کرده و اجرای اسکریپت را متوقف خواهیم کرد :
Error: [$errno] $errstr
"; echo "Ending Script"; die(); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>=1) { trigger_error("Value must be 1 or below",E_USER_WARNING); } ?>
خروجی کد مثال فوق به صورت زیر خواهد بود :
Error: [512] Value must be 1 or below
Ending Script
هم اکنون که با نحوه طراحی error های دلخواه در سطح برنامه و فراخوانی آن ها آشنا شدید، قصد داریم تا نحوه ثبت کردن خطا یا (error logging) را در PHP آموزش دهیم.
آموزش ثبت خطا یا error logging در PHP :
به صورت پیش فرض و بر حسب این که مقدار error-log در فایل تنظیمات برنامه (فایل php.ini) چگونه تنظیم شده باشد، PHP در هنگام بروز خطا، یک کد ثبت خطا یا error log را به سیستم خطاها یا به یک فایل خاصی ارسال می کند.
با استفاده از تابع error_log() می توانید ثبت جزئیات خطاها (error log) را به یک فایل خاص یا یک سرور راه دور ارسال کنید. همچنین ارسال پیام های خطا به وسیله email نیز یک راه بسیار مطمئن جهت اطلاع از بروز خطا در سیستم است.
اموزش نحوه ارسال یک پیام خطا (Error Message) با ایمیل :
در کد مثال عملی زیر، در صورتی که یک خطای خاص رخ دهد، پیام خطایی را به وسیله ایمیل به کاربر ارسال کرده و اجرای اسکریپت را متوقف کرده ایم :
Error: [$errno] $errstr
"; 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("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
البته ارسال خطا به وسیله ایمیل در موارد حیاتی ضروریت داشته و مابقی error ها را بایستی توسط سیستم ثبت کننده خطاهای PHP در فایل log ذخیره نمود.