سلام دوستان خوب، عزیز ، حالتون خوبه؟ با اموزش امروز که در مورد برطرف کردن خطاهای 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.