سلام دوستان خوب، عزیز ، حالتون خوبه؟ با اموزش امروز که در مورد برطرف کردن خطاهای php است در خدمت شماهستم.
رفع خطاها، فرآیند پیدا کردن خطاها یی است که برنامه اعلام می کند. پس از پیدا کردن خطا اقدام مناسب صورت می گیرد. اگر این خطاها به درستی رفع نگردند، در آینده به مشکلات و تبعات دور از انتظار برخورد خواهید کرد.
رفع خطاها در PHP بسیار پروسه ی آسانی است.
استفاده از die() function
هنگام برنامه نویسی و پیش از پرداختن به رفع error، شما باید تمام شرایطی که ممکن است خطا در آن رخ دهد را پیش بینی کرده و درنظر بگیرید.
مثال زیر را بدون فایل /tmp/test.xt و با این فایل امتحان کنید.
if(!file_exists(“/tmp/test.txt”))
{
die(“File not found”);
}
else
{
$file=fopen(“/tmp/test.txt”، ”r”);
print “Opend file sucessfully”;
}
// Test of the code here.
?>
با این روش می توانید یک کُد کارآمد بنویسید. با استفاده از این تکنیک، شما می توانید برنامه ی خود را هر زمانی که error داد متوقف کنید و پیغام های بسیار ساده تر و معنی دار تر نمایش دهید.
تعریف تابع سفارشی رفع خطا {custom error handling}
شما می توانید عملکرد سفارشی و خاص خود را برای رفع خطا بنویسیید.PHP چهارچوب خاصی برای معرفی و نوشتن عملکرد رفع خطا مشخص می کند.
این عملکرد باید حداقل با دو پارامتر هم زمان کار کند ) error message و error level) ولی می تواند تا حداقل پنج پارامتر را بپذیرد )به دلخواه، فایل، شماره ی خط {file number} ومتن خطا {error context}).
syntax {دستور نحوی}
error_function(error_level، error_message، error_file، error_line، error_context);
Description
parameter
اجباری-error report level {سطح و مرحله ی خطا} را برای user-defined error{خطای مربوط به کاربر } روشن می سازد.باید یک value number باشد.
error_level
الزامی-پیغام خطا را برای خطای مربوط به و از طرف کاربر تعریف می کند.
error_message
اختیاری-اسم فایلی را که خطا در آن رخ می دهد را معرفی می کند.
error_file
اختیاری-شماره ی خطی را که خطا در آن رخ می دهد را معرفی می کند.
error_line
اختیاری-آرایه{array}ای که تمام variable و value های مربوط به آن در به هنگام رخ دادن error ، در حال استفاده شدن بودن را در برداشت .
error_context
مراحل احتمالی خطا {error levels}
این error levels انواع خطاهیی هستند که برنامه ی رفع کننده ی خطا نوشته شده توسط خود کاربر را می توان برای مدیریت و رفع آن به کار برد.
Value {مقدار}
Constant{ثابت}
Description{توصیف کاربرد}
۱
E_ERROR
خطای جدی زمان-اجرا{fatal run-time error}.اجرای پردازه{script} را متوقف می کند.
۲
E_WARNING
خطاهای جزئی زمان-اجرا. اجرای پردازه{script} متوقف نمی شود.
۴
E_PARSE
Compile-time parse error{خطا، تجزیه زمان -کامپایل }، خطای تجزیه {pars} فقط توسط parser تولید واعلام می شود.
۸
E-NOTICE
اخطاریه زمان-اجرا. پردازه چیزی را پیدا می کند که ممکن است خطا یا error محسوب شود، ولی این مشکل ممکن هنگام اجرای پردازه هم رخ دهد.
۱۶
E-CORE-ERROR
خطاهای اساسی که هنگام اجرا و بالا آمدن برنامه رخ می دهد.
۳۲
E-CORE-WARNING
خطاهای جزئی زمان-اجرا.این دسته خطا ها درحال اجرا اولیه PHP روی می دهد.
۲۵۶
E-USER-ERROR
خطاهای جدی تولید شده توسط کاربر-این خطا مانند E-ERROR می مانند که توسط برنامه نویس تنظیم شده و از تابع trigger-error() ، PHP استفاده می کند.
۵۱۲
E_USER_WARNING
هشدارهای جزئی user-generated {از طرف کاربر} این خطا مانند E-WARNING می مانند که توسط برنامه نویس تنظیم شده و از تابع trigger-error() ، PHP استفاده می کند.
۱۰۲۴
E_USER_NOTICE
اخطار از جانب کاربر- این خطا مانند E_NOTICE می مانند که توسط برنامه نویس تنظیم شده و از تابع trigger-error() ، PHP استفاده می کند.
۲۰۴۸
E_STRICT
اخطار زمان-اجرا{run-time }-در صورت فعال بودن ،
PHP تغییراتی را برای کُد شما پیشنهاد می کند که تبعاً باعث سازگاری و همچنین {interoperability} سازگاری پیش رو {forward compatibility} کُد شما می شود.
۴۰۹۶
E_RECOVERABLE_ERROR
خطا پیداکردنی جدی {catchable fatal error} این اخطار مانند E-ERROR است با این تفاوت که می توان آن را با رفع کننده ی خطا، نوشته شده توسط کاربر {user-defined error handler} پیدا و مدیریت کرد.
۸۱۹۱
E_ALL
تمامی خطا و هشدارها به جز E_STRICT.(E_STRICT از PHP 6 بخشی از E_ALL )
تمام مراحل خطا {error level} بالا را می توان با استفاده از PHP built-in library function زیر انتخاب کرد که در آن خطا می تواند هر یک از value های تعریف شده در جدول بالا باشد.
int error_reporting ( [int $level] )
در عبارت زیر یکی از راه هایی که می توانید با آن تابع مدیریت و رفع خطا ایجاد کنید به نمایش گذاشته شده است.
function handleError($errno، $errstr، $error_file، $error_line)
{
echo “Error: [$errno] $errstr – $error_file:$error_line”;
echo “
”;
echo “Terminating PHP Script”;
die();
}
?>
پس از این که error-handler custom {رفع کننده ی خطا سفارشی و مخصوص به خود} را نوشتید ، باید به کمک set_error_handler که یکی از عملکردهای PHP built-in library function هست آن را انتخاب و تنظیم کنید.حال اجازه دهید با مثال زیر عملکرد {function} ای که وجود ندارد فرابخوانیم.
error_reporting( E_ERROR );
function handleError($errno، $errstr، $error_file، $error_line)
{
echo “Error: [$errno] $errstr – $error_file:$error_line”;
echo “
”;
echo “Terminating PHP Script”;
die();
}
//set error handler
set_error_handler(“handleError”);
//trigger error
myFunction();
?>
مدیریت استثنا ها {handling exception}
PHP5 مدل استثنا {exception model} ای شبیه به زبان های برنامه نویسی دیگر دارد.استثنا ها از اهمییت بسیار برخوردار است و تسلط بیشتری در رفع و مدیرییت خطا در اختیار شما قرار می دهد.
اجازه دهید واژه های کلیدی مربوط به استثنا ها را یکی یکی تشریح کنیم.
try – تابع {function} ای که از استثنا {exception} استفاده می کند باید در بلوک {block} try باشد. اگر استثنا فعال یا trigger نشود، کُد روال عادی خودش را ادامه می دهد. اما اگر trigger شود ، یک exception نشان داده {thrown} می شود.
throw – به کمک این آیتم شما {trigger} باعث یک {exception} استثنا می شوید. هر “throw” حداقل باید یک “exception ” داشته باشد.
catch – یک بلوک “catch” با بازیابی یک استثنا object یا شی ای می سازد دربردارنده ی اطلاعات exception.
هنگامی که استثنا یی “thrown” می شود، کُدی که به دنبال دستور {statement} می آید اجرا نخواهد شد و PHP سعی می کند اولین matching catch block {کَچ بلاک مطابق} را پیدا کند. اگر هیچ استثتنایی “catch” نشد، یک پیغام خطای جدی PHP صادر می شود به این شکل “uncaught exception….
یک استثنا را در PHP می توان پرتاب کرد {thrown} و گرفت {caught یا catched} .کد ممکن است داخل یک بلوک تلاش {try block} محصور شده یا قرار گیرد.
هر تلاش {try} باید حداقل یک catch block مطابق و مربوط داشته باشد. می توان از چند code block برای گرفتن {catch} چند نوع یا کلاس استثنا {exception class} هم زمان استفاده کرد.
استثنا ها را می توان در یک codeblock throw یا rethrow کرد.
مثال
در زیر یک تکه کُد هست، این کد را در یک فایل کپی و پیست کنید و سپس نتایج را بررسی و تایید کنید.
try {
$error = ‘Always throw this error’;
throw new Exception($error);
// Code following an exception is not executed.
echo ‘Never executed’;
} catch (Exception $e) {
echo ‘Caught exception: ‘، $e->getMessage()، “\n”;
}
// Continue execution
echo ‘Hello World’;
?>
در مثال بالا از $e->getMessage function برای دریافت پیغام خطا استفاده می شود. function های زیر را می توانید از exception class انتخاب کنید.
getmessage() – پیغام استثنا {message of exception}
getcode() – کُدِ استثنا {code of exception}
getcode() – اسم فایل منبع {source filename}
getline() – خط منبع {source line}
gettrace() – آرایه ی backtrace()
gettraceasstring() – رشته ی فرمت شده و قالب دار پی گیری {array of formatted string}
ساختن مدیریت کننده سفارشی استثنا ها {custom exception handler}
شما می توانید رفع کننده ی استثنا خاص خود را طراحی کنید. از تابع {function} زیر برای انتخاب کردن این گزینه استفاده کنید.
string set_exception_handler ( callback $exception_handler )
اینجا exception_handler نام function ای است که هنگام رخ دادن یک uncaught exception باید فراخوانده شود. این function باید قبل از فراخواندن set_exception_handler() معرفی شود.
مثال
function exception_handler($exception) {
echo “Uncaught exception: ” ، $exception->getMessage()، “\n”;
}
set_exception_handler(‘exception_handler’);
throw new Exception(‘Uncaught Exception’);
echo “Not Executed\n”;
?>
مجموعه کامل function های رفع کننده ی خطا را در این می توان مشاهده کرد PHP Error Handling Functions.