- پی اچ پی
- زمان 7 دقیقه
مدیریت خطاهای احتمالی در کدها و اسکریپت های PHP ساده و روان است . در حالت پیش فرض یک پیام خطا همراه با نام فایلی که خطا در آن رخ داده ، شماره خط خطا و پیامی که تشریح کننده خطا است ، به مرورگر ارسال می شود .
- نحوه مدیریت خطا در PHP
- ساده ترین روش مدیریت خطا در PHP – تابع ( ) die
- پیام خطا
- کد تابع ( ) die
- پیام خطای جدید
- همچین چندین پارامتر اختیاری نیز می تواند داشته باشد
- پارامترهای کد فوق و استفاده آنها
- تنظیم فراخوان کننده تابع مدیریت خطا ( event handler )
- تابع ( ) error_trigger
- خروجی این خطا ، به صورت زیر خواهد بود
- خروجی کد ، این بار به صورت زیر خواهد بود
- تابع ( ) error_log
- خروجی خطای رخ داده در سیستم به صورت زیر خواهد بود
- همچین کاربر ایمیلی با محتویات زیر را دریافت خواهد کرد
- مرجع توابع مدیریت خطا در PHP
نحوه مدیریت خطا در PHP :
در زمان نوشتن اسکریپت ها و برنامه های تحت وب ، مدیریت خطا یک بخش مهم به حساب می آید . اگر کد شما ، نقص مدیریت خطا داشته باشد ، برنامه طراحی شده بسیار مبتدی به نظر آمده و خطراتی ممکن است آن را تهدید نماید .
در این بخش مهمترین و پرکاربردترین متدهای مدیریت خطادر PHP را بررسی می کنیم ، که عبارتند از :
- تابع ساده ( ) die .
- برخورد با خطاهای گوناگون و فعال کننده های خطا .
- گزارش دهی خطا .
ساده ترین روش مدیریت خطا در 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
برای جلوگیری از صدور پیام خطایی مشابه پیام فوق ، کدی را طراحی می کنیم تا ابتدا وجود یا عدم وجود فایل مورد نظر را بررسی کرده و سپس دستور مناسب را اجرا نماید :
کد تابع ( ) die :
<?php if( !file_exists( "welcome.txt" ) ) { die("File not found"); } else { $file = fopen( "welcome.txt" , "r" ); } ?>
حال اگر در باز کردن فایل مورد نظر ، خطایی رخ دهد ، به جای پیام طولانی فوق ، پیام ملموس و کوتاه زیر نمایش داده می شود :
پیام خطای جدید:
File not found
البته لازم به ذکر است که روش فوق برای خطاهای معمولی قابل استفاده بوده و در موارد مهمتر باید از مدیریت کننده های خطاهای پیشرفته تر استفاده نمود .
ایجاد یک مدیریت کننده خطا در PHP :
ساخت یک مدیریت کننده خطا نسبتا ساده است . به طور معمول ، تابعی را طراحی می کنیم تا در هنگام بروز خطا در صفحه ، فراخوانی شود .
تابع طراحی شده بایستی حداقل دو پارامتر ورودی را دریافت و مدیریت کند :
- شدت اهمیت خطا ( error level ).
- پیام خطا ( error message )
همچین چندین پارامتر اختیاری نیز می تواند داشته باشد :
- نام فایل ( file name ).
- شماره خطی از برنامه که خطا در آن رخ داده است ( line number ) .
- محتوای خطا ( error context ) .
شکل کلی یک تابع طراحی شده برای مدیریت خطا در PHP می تواند به صورت زیر باشد :
error_function ( error_level , error_message , error_file , error_line , error_context ) ;
پارامترهای کد فوق و استفاده آنها :
error_level: این پارامتر شدت اهمیت خطا را تعیین می کند . یک مقدار عددی است و شرح موارد آن در جدول راهنمای شماره ۱ آمده است. استفاده از این پارامتر اجباری است. این پارامتر پیام خطا را که حاوی اطلاعاتی راجع به آن است را تعیین می کند .
error_message: استفاده از این پارامتر اجباری است. این پارامتر نام فایلی که خطا در آن رخ داده است ، را مشخص می کند. استفاده از این پارامتر اختیاری است .
error_line: این پارامتر شماره خطی که خطا در آن رخ داده است را مشخص می کند. استفاده از این پارامتر اختیاری است. این پارامتر نیز تمامی متغیرها و مقدارهایشان که در کد برنامه ای که خطا در آن رخ داده است را شامل می شود .
error_context: استفاده از این پارامتر اختیاری است .
نحوه طراحی یک مدیریت کننده خطا :
تابع زیر یک مدیریت کننده خطای معمولی را نشان می دهد که میزان شدت اهمیت خطا و پیام آن را در خروجی چاپ می کند :
function customError( $errno , $errstr ) { echo "Error : [$errno] $errstr "; echo "Ending Script"; die( ); }
هنگامی که خطایی رخ می دهد ، تابع فوق شدت اهمیت خطا را توسط پارامتر $errno و پیام خطا را توسط پارامتر $errstr دریافت کرده و در خروجی نشان می دهد .
اکنون که تابع مدیریت خطا را طراحی کردیم ، باید کد فراخوان آن را در جاهایی که می خواهیم ، قرار داده تا در صورت بروز خطا ، تابع فوق فراخوانی شود .
تنظیم فراخوان کننده تابع مدیریت خطا ( event handler ) :
مدیریت کننده پیش فرض برای خطا در PHP تعیین شده است . اما در مثال این بخش ، ما قصد داریم تا تابعی به نام ( ) customError را که خود برای اجرا در زمان بروز خطا ، طراحی کرده ایم را به عنوان مدیریت کننده پیش فرض خطا قرار دهیم .
لازم به ذکر است که این امکان وجود دارد تا شما برای هر بخش از کد یا دسته ای از توابع یک مدیریت کننده خطا پیش فرض تعیین کنید ، تا در مواقع مختلف بروز خطا ، به گونه های مختلف با آن برخورد نمایید .
اما در این مثال به وسیله تابع ( ) set_error_handler ، ما تابع ( ) customError را به عنوان مدیریت کننده خطای پیش فرض اسکریپت تعیین کرده ایم :
set_error_handler( " customError " );
مثال : در مثال زیر ، پس از اینکه تابع مدیریت کننده خطا پیش فرض را برای برنامه تعیین کردیم ، در خط آخر مثال ، به برنامه دستور داده ایم تا مقدار متغیری که تعریف نشده است را چاپ کند !! این کار باعث بروز یک خطا شده و تابع مدیریت خطا را فراخوانی می کند :
<?php // تابع مدیریت کننده خطا function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // تعیین تابع پیض فرض برای مدیریت خطا set_error_handler("customError"); // بروز و فراخوانی خطا echo($test); ?>
پس از اجرای کد فوق و بروز خطا ، پیام زیر به عنوان پیام خطا توسط تابع ( ) customError اعلام می شود .
Error : [8] Undefined variable : test
تابع ( ) error_trigger:
در این بخش کار با تابع ( ) error_trigger را فرا خواهید گرفت . از تابع ( ) error_trigger در زمانی استفاده می شود که بروز خطا را پیش بینی کرده و کد لازم را برای مدیریت آن تعیین می کنیم .
کار با این تابع را در قالب یک مثال آموزش می دهیم . معمولا خطا در جاهایی که از کاربر ورودی دریافت می کنید ، احتمال زیادی دارد ، که رخ دهد . مثلا کاربر مقادیر غیر مجاز وارد نماید .
در مثالی زیر کدی طراحی کرده ایم تا در صورتی که مقدار متغیر test$ از ۱۰ بیشتر بود ، یک پیام خطا توسط رویداد ( ) error_trigger صادر شود .
مثال :
<?php $test=20; if ( $test > 10 ) { trigger_error( "Value must be 10 or below" ) ; } ?>
خروجی این خطا ، به صورت زیر خواهد بود :
Notice: Value must be 1 or below in C:\webfolder\test.php on line 6
پیام خروجی مثال فوق را با تعیین یک تابع به عنوان تابع پیش فرض برای مدیریت خطا می توان اصلاح کرد .
در مثال زیر ، شکل کاملتری از مثال فوق را ارائه دادیم .
در کد زیر ، به علت اینکه تابع ( ) customError را به عنوان تابع مدیریت کننده پیش فرض کد تعریف کرده ایم ، در هنگام بروز خطا ، تابع ( ) error_trigger پارامترهای لازم را درباره خطا به تایع ( ) customError فرستاده و این بار این تابع خروجی خطا را اعلام کرده و آن را مدیریت می کند :
<?php // تابع مدیریت کننده خطا function customError( $errno , $errstr ) { echo "Error: [$errno] $errstr<br>"; echo "Ending Script"; die( ); } // تعیین تابع مدیریت کننده پیش فرض set_error_handler( "customError",E_USER_WARNING ) ; // بروز خطا و ارسال پارامترهای لازم $test = 20 ; if ( $test > 10 ) { trigger_error( "Value must be 10 or below",E_USER_WARNING ) ; } ?>
خروجی کد ، این بار به صورت زیر خواهد بود :
Error: [512] Value must be 10 or below Ending Script
تابع ( ) error_log:
به صورت پیش فرض ، PHP یک پیام حاوی اطلاعات خطا رخ داده را به سیستم logging سرور یا یک فایل خاص ، بسته به اینکه فایل php.ini ، بر روی سرور چگونه تنظیم شده باشد ، ارسال می کند .
به وسیله تابع ( ) error_log ، می توانید پیام های خطا رخ داده را به یک فایل خاص یا به ایمیل کاربر ارسال نمایید . ارسال یک ایمیل حاوی اطلاعات خطا می تواند یکی از کارآمدترین روش ها باشد . البته فقط این کار را برای خطاهای مهم و از کار اندازنده انجام دهید ، نه هر خطای معمولی ! .
در مثال زیر ، نحوه استفاده از تابع ( ) error_log را در عمل نمایش داده و در صورت بروز خطا ، ایمیلی حاوی اطلاعات آن به آدرس ایمیل کاربر ، ارسال می شود :
مثال:
<?php // تابع مدیریت کننده خطا و فرستنده ایمیل function customError($errno, $errstr) { echo " Error: [$errno] $errstr<br>"; echo "Webmaster has been notified"; error_log("Error: [$errno] $errstr",1, " someone@example.com " , " From: webmaster@example.com " ) ; } // تعیین تابع پیش فرض خطا set_error_handler("customError",E_USER_WARNING); // مکان بروز خطا $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
مرجع توابع مدیریت خطا در PHP :
در این بخش مهمترین و پرکاربردترین توابع زبان PHP برای مدیریت خطاهای رخ داده در برنامه را معرفی کرده ایم . برای دریافت اطلاعات بیشتر بر روی نام هر تابع کلیک نمایید :
به وسیله این توابع می توانید خطاهای رخ داده در کدهای PHP را شناسایی و مدیریت کرده و اطلاعات مربوط به آنها را در log سرور ذخیره کرده و یا برای ایمیل کاربر ارسال نمایید .
نکته : تمامی توابع مدیریت خطای PHP ، به صورت پیش فرض بر روی سرورهای این زبان نصب شده و نیاز به هیچ نصب اضافه ای نیست .
debug_backtrace ( ) این تابع اطلاعات کاملی راجع به خطای رخ داده را ، به صورت یک آرایه نمایش می دهد .
error_get_last ( ) این تابع اطلاعات آخرین خطای رخ داده در کد برنامه را بر می گرداند .
error_log ( ) این تابع اطلاعات خطاهای رخ داده در صفحه را در یک فایل بر روی سرور ذخیره کرده و یا به ایمیل کاربر ارسال می کند .
error_reporting ( ) این تابع مشخص می کند که چه خطاهایی به سیستم گزارش شوند .
set_error_handler ( ) این تابع یک تابع را به عنوان تابع پیش فرض برای مدیریت خطاها در صفحه تعیین می کند .
set_exception_handler ( ) این تابع ، یک تابع تعیین شده از سوی طراح را به عنوان تابع مدیریت کننده استثناها در صفحه تعیین می کند .
trigger_error ( ) این تابع برای شناسایی یک خطا یا فراخوانی تابع مربوط به آن به کار می رود .
user_error ( ) این تابع برای شناسایی یک خطا یا فراخوانی تابع مربوط به آن به کار می رود . عملکرد آن همانند تابع ( ) trigger_error است .
دیدگاه خود را بیان کنید