آموزش مدیریت خطا و استثنا در PHP

3 سال پیش
آموزش مدیریت خطا و استثنا در PHP

آموزش مدیریت خطا و استثنا در PHP

 

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت خطا و استثنا در PHP خواهیم پرداخت.

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

برای کنترل خطاها در PHP بسیار ساده است.

استفاده از تابع ()die 

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

مثال را بدون داشتن پرونده /tmp/test.xt و با این فایل دنبال کنید.

<?php
   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.
?>

 

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

تعریف تابع مدیریت خطاهای سفارشی

شما می توانید تابع خود را برای مدیریت هر خطایی بنویسید. PHP چارچوبی برای تعریف تابع مدیریت خطا در اختیار شما قرار می دهد.

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

نحو

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

 

۱ error_level

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

۲ error_message

اجباری – پیام خطا را برای خطای تعریف شده توسط کاربر مشخص می کند

۳ error_file

اختیاری – نام پرونده ای را که خطا در آن رخ داده را مشخص می کند

۴ error_line

اختیاری – شماره خطی را که خطا در آن رخ داده را مشخص می کند

۵ error_context

اختیاری – آرایه ای را مشخص می کند که شامل هر متغیر و مقادیر استفاده از آنها هنگام وقوع خطا باشد

 

سطوح احتمالی خطا

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

ثابت و توضیحات مقدار
۱ .E_ERROR

خطاهای خطرناک زمان اجرا. اجرای متن متوقف شده است

۱
۲ E_WARNING

خطاهای زمان اجرا غیر کشنده. اجرای متن متوقف نیست

۲
۳ E_PARSE

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

۴
۴ E_NOTICE

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

۸
۵ E_CORE_ERROR

خطاهای خطرناکی که در هنگام راه اندازی اولیه PHP رخ می دهد.

۱۶
۶ E_CORE_WARNING

خطاهای زمان اجرا غیر خطرناک. این در هنگام راه اندازی اولیه PHP اتفاق می افتد.

۳۲
۷ E_USER_ERROR

خطای خطرناک ایجاد شده توسط کاربر. این مانند E_ERROR است که توسط برنامه نویس با استفاده از تابع PHP trigger_error تنظیم شده است

۲۵۶
۸ E_USER_WARNING

هشدار غیر خطرناک تولید شده توسط کاربر. این مانند E_WARNING تنظیم شده توسط برنامه نویس با استفاده از تابع PHP trigger_error است

۵۱۲
۹ E_USER_NOTICE

اعلان تولید شده توسط کاربر. این مانند E_NOTICE است که توسط برنامه نویس با استفاده از تابع PHP trigger_error تنظیم شده است

۱۰۲۴
۱۰ E_STRICT

اعلامیه های زمان اجرا PHP می تواند تغییراتی را در کد شما ایجاد کند که اطمینان از بهترین قابلیت همکاری و سازگاری سریع کد شما با آن امکان پذیر است.

۲۰۴۸
۱۱ E_RECOVERABLE_ERROR

خطای مهلک قابل جلب. این مانند E_ERROR است اما می تواند توسط یک دسته مشخص شده توسط کاربر گیر بیابد (همچنین به set_error_handler مراجعه کنید

۴۰۹۶
۱۲ E_ALL

همه خطاها و هشدارها ، به جز سطح E_STRICT (E_STRICT از PHP 6.0 بخشی از E_ALL خواهد بود)

 

تمام سطح خطای فوق را می توان با استفاده از تابع PHP داخلی کتابخانه تنظیم کرد که در آن کابین سطح از هر مقدار تعریف شده در جدول بالا باشد.

int error_reporting ( [int $level] )

 

در زیر روش ایجاد یک تابع مدیریت خطا وجود دارد –

<?php
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
?>

 

به محض اینکه کنترل کننده خطای سفارشی خود را تعریف کردید ، باید آن را با استفاده از PHP توابع مجموعه set_error_handler تنظیم کنید. حال بیایید با فراخوانی تابعی که وجود ندارد ، مثال خود را بررسی کنیم.

<?php
   error_reporting( E_ERROR );
   
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
   
   //set error handler
   set_error_handler("handleError");
   
   //trigger error
   myFunction();
?>

 

مدیریت استثنائات

PHP 5 یک مدل استثنایی شبیه به سایر زبانهای برنامه نویسی دارد. استثنائات مهم هستند و كنترل بهتري را در مورد كنترل خطا فراهم مي كنند.

بیایید در اینجا کلمه کلیدی جدید مربوط به موارد استثنا را توضیح دهیم.

  • Try – یک تابع با استفاده از یک استثنا باید در بلوک “امتحان” باشد. اگر استثنا راه اندازی نکند ، کد به صورت عادی ادامه می یابد. اما اگر استثنا باعث شود ، یک استثنا “thrown” می شود.
  • thrown – اینگونه استثنا را ایجاد می کنید. هر “پرتاب” باید حداقل یک “Catch” داشته باشد.
  • Catch – بلوک “catch” یک استثنا را بازیابی می کند و یک شی object حاوی اطلاعات استثنا ایجاد می کند.

 

هنگامی که یک استثنا thrown می شود، کد زیر عبارت اجرا نمی شود ، و PHP تلاش می کند تا اولین بلوک catch منطبق را پیدا کند. اگر یک استثنا گیر نیفتد ، یک خطایخطرناک PHP با “Uncaught Exception …” صادر می شود

یک استثنا را می توان در PHP پرتاب کرد ، و گرفت (“catch”) کرد. کد ممکن است در یک بلوک try احاطه شده باشد.

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

موارد استثنا را می توان در یک بلوک صید پرتاب کرد (یا دوباره پرتاب کرد).

مثال

در زیر قطعه کد وجود دارد ، این کد را در یک فایل کپی و جایگذاری کنید و نتیجه را تأیید کنید.

<?php
   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$ برای دریافت پیام خطا استفاده شده است. توابع زیر وجود دارد که می تواند از کلاس Exception استفاده شود.

  • ()getMessage – پیام استثنا
  • ()getCode  – کد استثنا
  • ()getFile – نام پرونده منبع
  • ()getLine – خط منبع
  • getTrace ()  آرایه ()backtrace
  • ()getTraceAsString – رشته ردیابی شکل گرفته

 

ایجاد کنترل کننده استثناهای سفارشی

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

string set_exception_handler ( callback $exception_handler )

 

در اینجا Exception_handler نام تابعی است که هنگام وقوع یک استثنا غیرقابل ضبط فراخوانی می شود. این تابع قبل از فراخوانی ()set_exception_handler  باید تعریف شود.

مثال

<?php
   function exception_handler($exception) {
      echo "Uncaught exception: " , $exception->getMessage(), "\n";
   }
    
   set_exception_handler('exception_handler');
   throw new Exception('Uncaught Exception');
   
   echo "Not Executed\n";
?>

 

منبع.

 

لیست جلسات قبل آموزش PHP

  1. آموزش PHP
  2. معرفی PHP
  3. آموزش تنظیمات محیط PHP
  4. آموزش نحو PHP
  5. آموزش انواع متغیر در PHP
  6. آموزش انواع ثابت ها در PHP
  7. آموزش انواع عملگرها در PHP
  8. آموزش تصمیم گیری در PHP
  9. آموزش انواع حلقه در PHP
  10. آموزش آرایه ها در PHP
  11. آموزش رشته ها در PHP
  12. آموزش مفاهیم وب در PHP
  13. آموزش روش های  GET & POST در PHP
  14. آموزش Inclusion فایل در PHP
  15. آموزش پرونده ها و I / O در PHP
  16. آموزش توابع در PHP
  17. آموزش کوکی ها در PHP
  18. آموزش جلسات در PHP
  19. آموزش ارسال ایمیل با استفاده از PHP
  20. آموزش بارگذاری پرونده در PHP
  21. آموزش استاندارد کدگذاری در PHP
  22. آموزش متغیرهای از پیش تعریف شده در PHP
  23. آموزش عبارات منظم در PHP
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه