یه بار برای همیشه، فرانت‌ اند رو اصولی یاد بگیر! یه بار برای همیشه، فرانت‌ اند رو اصولی یاد بگیر!
🎯 ثبت نام
بستن تبلیغات
دوره آموزش جامع PHP از صفر تا صد با پروژه‌های عملی

توی دوره رایگان PHP، هر چیزی که برای حرفه‌ای شدن نیاز داری رو یاد می‌گیری! از مفاهیم پایه تا پیشرفته، همراه با یه پروژه واقعی برای ساخت یه سایت مثل آپارات.

مشاهده بیشتر
دوره پروژه‌محور لاراول: ساخت وبسایت خبری از صفر تا صد

توی این دوره با هم یه وبسایت خبری واقعی رو از صفر می‌سازیم! از طراحی دیتابیس و احراز هویت تا ساخت API و یه پنل مدیریت حرفه‌ای، همه رو یاد می‌گیریم و آماده پروژه‌های واقعی میشی!

مشاهده بیشتر

آموزش مدیریت خطا (Error Handling) در PHP

آموزش مدیریت خطا (Error Handling) در PHP :

سیستم مدیریت خطای پیش فرض یا default error handling در PHP بسیار ساده عمل می کند. این سیستم در هنگام بروز خطا، یک پیام هشدار حاوی نام فایل، شماره خط بروز خطا به همراه توصیفی از شرح خطا را به مرور گر ارسال می کند.
در هنگام طراحی اسکریپت ها و نرم افزارهای تحت وب، مدیریت خطا یا errorHandling بخش مهمی از کد می باشد. اگر کد شما نتواند error های احتمالی را چک کند، برنامه تان بسیار غیر حرفه ای به نظر رسیده و می تواند شما را با چالش های امنیتی رو به رو کند.
در این بخش آموزش PHP، مهم ترین متدهای چک کردن خطا در زبان PHP را بررسی خواهیم کرد. این متدهای مدیریت خطا عبارتند از :

  • دستورهای ساده با تابع “die()”.
  • error های خاص و بررسی تحریک کننده خطا (error triggers).
  • آموزش نحوه گزارش کردن خطاها یا (error reporting).

آموزش روش پایه مدیریت خطا PHP-تابع die() :

در کد مثال اول مدیریت خطا، به وسیله اسکریپت زیر برنامه قصد دارد تا یک فایل متنی (text file) را باز کند :

1
2
3
4
<!--?php
  $file=fopen("welcome.txt","r");
?-->
                <button></button>

اگر در کد فوق، فایل مورد نظر وجود نداشته باشد، احتمالا با خطاهایی هماند متن زیر مواجه خواهید شد :

1
2
3
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
                <button></button>

برای جلوگیری از نمایش پیغام خطایی مثل متن فوق به کاربر، کد را به صورت زیر تغییر داده ایم. در این کد جدید ابتدا برنامه وجود فایل را بررسی کرده و سپس در صورت موجود بودن آن، اقدام به باز کردن فایل می کند:

1
2
3
4
5
6
7
8
<!--?php
  if(!file_exists("welcome.txt")) {
    die("File not found");
  } else {
    $file=fopen("welcome.txt","r");
  }
?-->
                <button></button>

حال اگر فایل مورد نظر وجود نداشته باشد، برنامه پیغام خطای زیر را صادر می کند :

1
2
File not found
                <button></button>

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

ایجاد یک مدیریت کننده خطا دلخواه (Custom Error Handling) :

ایجاد یک مدیریت کنده دلخواه خطا (Custom Error Handling) در زبان PHP، کار نسبتا ساده ای است. می توانیم به راحتی یک تابع دلخواه PHP را ایجاد کنیم تا در هنگام بروز خطا، فراخوانی شود.
تابع دلخواهی که برای مدیریت خطا ایجاد می کنیم، بایستی حداقل بتواند دو پارامتر خطا (درجه خطا (error level) و پیام خطا (error message)) را مدیریت کند و تا پارامتر اختیاری را دریافت کند (پارامترهای اختیاری مثل نام فایل، شماره خط کد بروز خطا و محتویات خطا).
ساختار کلی تعریف یک تابع مدیریت کننده دلخواه در PHP به صورت زیر است :

1
2
error_function(error_level,error_message,error_file,error_line,error_context)
                <button></button>
پارامترهای تابع مدیریت کننده خطا در PHP
error_ level
error_message
error_file
error_line
error_context
تعیین این پارامتر اجباری بوده و درجه گزارش خطا را برای error مورد نظر کاربر تعیین می کند. بایستی یک مقدار عددی باشد که انواع حالت های ان را در جدول بعدی توضیح داده ایم.
پارامتر اجباری. این پارامتر پیام خطا مربوط به error رخ داده را تعیین می کند.
پارامتر اختیاری. این پارامتر نام تابعی که خطا در آن رخ داده است را مشخص می کند.
پارامتر اختیاری. این پارامتر شماره و آدرس خط کدی که خطا در آن رخ داده را تعیین می کند.
پارامتر اختیاری. این پارامتر یک آرایه است که نام و مقدار کلیه متغیرهای برنامه را در هنگام بروز خطا ثبت و نگهداری می کند.

جدول درجه های خطا در PHP :

در بخش قبل گفتیم که هر خطای رخ داده در برنامه های PHP شامل یک درجه یا level است که درجات آن را در لیست زیر مشاهده می کنید :

پارامترهای تابع مدیریت کننده خطا در PHP
E_WARNING
E_NOTICE
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
E_RECOVERABLE_ERROR
E_ALL
درجه خطاهای غیر مخرب در زمان اجرا است که باعث توقف اجرای اسکریپت نمی شوند.
این درجه شامل اخطارهای زمان اجرا می شود. اسکریپت ممکن است چیزی مشاهده کند که ممکن است خطا باشد، یا این که این اشکالات می تواند در روند عادی اجرای اسکریپت رخ دهد.
این درجه شامل خطاهای مخربی می شود که توسط کد کاربر رخ داده اند. این نوع خطاها شبیه یک E_ERROR هستند که توسط کاربر و با استفاده از تابع trigger_error() تنظیم شده اند.
این درجه شامل اخطارهای غیر مخربی می شود که توسط کد کاربر رخ می دهد. این نوع اخطارها مثل یک E_WARNING هستند که توسط کاربر و با استفاده از تابع trigger_error() تنظیم شده اند.
این درجه شامل اعلان های غیر مخربی می شود که توسط کد کاربر رخ می دهد. این نوع اعلان های مشکل توسط کاربر و با استفاده از تابع trigger_error() تنظیم شده اند.
این درجه خطا شامل خطاهای مخرب ولی قابل ردیابی است. این نوع error همانند یک E_ERROR است که توسط یک تابع مدیریت خطا (همانند Set_error_handler) شناسایی شده است.
این درجه از خطا شامل تمام error های رخ داده در سطح برنامه می شود.

اکنون بیایید یک تابعی ایجاد کنیم تا خطاهای موجود را مدیریت یا handle کند. کد تابع به صورت زیر است :

1
2
3
4
5
6
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}
                <button></button>

کد فوق یک تابع ساده مدیریت خطا (Error Handler) را نشان داده که در زمان فراخوانی شدن دو مقدار دریافت می کند. یک مقدار درجه خطا (error level) و دیگر پیام مرتبط با خطا (error message) . سپس تابع درجه و پیام خطا را در خروجی نشان داده و اجرای اسکریپت را متوقف می کند.
اکنون که یک تابع مدیریت کننده خطا را طراحی کردیم، بایستی تعیین کنیم چه زمانی لازم است این تابع فراخوانی و اجرا (trigger) شود.

آموزش تنظیم تابع مدیریت خطا در PHP :

تابع مدیریت خطای پیش فرض در PHP یک تابع پیش ساخته است که در سورس اصلی این زبان تعریف شده. در این درس قصد داریم تا تابعی که خودمان طراحی کردیم را به عنوان تابع پیش فرض مدیریت خطا در برنامه قرار دهیم.
این امکان نیز وجود دارد که یک تابع مدیریت خطا را به گونه ای تنظیم کنیم تا فقط برای برخی error ها اجرا شود، در این صورت می توان error های مختلف را به روش های گوناگون مدیریت کرد. اما در مثال عملی این درس، قصد داریم تابع خود را برای مدیریت تمامی خطاهای برنامه تنظیم کنیم :

1
2
set_error_handler("customError");
                <button></button>

از آنجایی که می خواهیم تابع مدیریت خطای دلخواه ما، تمامی error های احتمالی برنامه را مدیریت کند، تابع set_error_handler() فقط به یک پارامتر نیاز خواهد داشت و در پارامتر دوم می توان درجه خطا را تنظیم کرد.

مثال عملی :

در کد مثال عملی زیر، قصد داریم تا تابع مدیریت خطا را با تلاش برای چاپ مقدار یک متغیر که وجود ندارد، امتحان کنیم :

1
2
3
4
5
6
7
8
9
10
11
<!--?php
  //error handler function
  function customError($errno, $errstr) {
    echo "<b-->Error: [$errno] $errstr";
   }
  //set error handler
  set_error_handler("customError");
  //trigger error
  echo($test);
?>
                <button></button>

خروجی کد مثال فوق به صورت زیر خواهد بود :

1
2
Error: [8] Undefined variable: test
                <button></button>

فعال کردن یک خطا یا error trigger :

در اسکریپت هایی که کاربر می تواند اطلاعاتی را درون کادرهای متن وارد کند، فعال کردن error ها در زمان ارسال مقادیر غیر مجاز بسیار کاربردی است. در زبان PHP این کار با استفاده از تابع trigger_error() انجام می شود.

مثال عملی :

در کد مثال عملی زیر، در صورتی که مقدار متغیر “test” بیشتر از یک باشد، خطا مورد نظر فعال می شود :

1
2
3
4
5
6
7
<!--?php
  $test=2;
  if ($test-->=1) {
    trigger_error("Value must be 1 or below");
  }
?>
                <button></button>

خروجی کد مثال فوق به صورت زیر خواهد بود :

1
2
3
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6
                <button></button>

یک error دلخواه را می توان در هر کجای اسکریپت که لازم باشد، فراخوانی کرده و پارامتر دوم در تابع تعیین کننده درجه خطا (error level) می باشد. انواع مختلف error های محتمل عبارتند از :

پارامترهای تابع مدیریت کننده خطا در PHP
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
این دسته شامل خطاهای مخربی می شوند که توسط کد کاربر تولید شده اند. در این نوع خطاها دیگر نمی توان برنامه را از نقطه بروز خطا باز گرداند و پردازش اسکریپت متوقف خواهد شد.
این نوع خطا شامل اخطارهایی می شود که توسط کد کاربر در زمان اجرا رخ داده؛ ولی باعث توقف اجرای اسکریپت نمی شوند.
این درجه خطا، درجه پیش فرض کلیه error های احتمالی بوده و درواقع یک اعلان است که در هنگام بروز خطا در کد در حال اجرا صادر می شود.

در این حالت اسکریپت ممکن است به موردی برخورد کرده باشد که از نظر آن خطا بوده، ولی امکان دارد در هنگام اجرای برنامه به صورت عادی رخ دهد.

مثال عملی :

در کد مثال عملی زیر، در صورتی که مقدار متغیر “test” از بیشتر باشد، یک E_USER_WARNING رخ خواهد داد. اگر E_USER_WARNING رخ دهد، ما از تابع مدیریت خطای مورد نظر خود استفاده کرده و اجرای اسکریپت را متوقف خواهیم کرد :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--?php
  //error handler function
  function customError($errno, $errstr) {
    echo "<b-->Error: [$errno] $errstr<br>";
    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);
  }
?>
                <button></button>

خروجی کد مثال فوق به صورت زیر خواهد بود :

1
2
3
Error: [512] Value must be 1 or below
Ending Script
                <button></button>

هم اکنون که با نحوه طراحی error های دلخواه در سطح برنامه و فراخوانی آن ها آشنا شدید، قصد داریم تا نحوه ثبت کردن خطا یا (error logging) را در PHP آموزش دهیم.

آموزش ثبت خطا یا error logging در PHP :

به صورت پیش فرض و بر حسب این که مقدار error-log در فایل تنظیمات برنامه (فایل php.ini) چگونه تنظیم شده باشد، PHP در هنگام بروز خطا، یک کد ثبت خطا یا error log را به سیستم خطاها یا به یک فایل خاصی ارسال می کند.
با استفاده از تابع error_log() می توانید ثبت جزئیات خطاها (error log) را به یک فایل خاص یا یک سرور راه دور ارسال کنید. همچنین ارسال پیام های خطا به وسیله email نیز یک راه بسیار مطمئن جهت اطلاع از بروز خطا در سیستم است.

اموزش نحوه ارسال یک پیام خطا (Error Message) با ایمیل :

در کد مثال عملی زیر، در صورتی که یک خطای خاص رخ دهد، پیام خطایی را به وسیله ایمیل به کاربر ارسال کرده و اجرای اسکریپت را متوقف کرده ایم :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--?php
  //error handler function
  function customError($errno, $errstr) {
    echo "<b-->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
  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);
  }
?>
                <button></button>

خروجی کد مثال به صورت زیر است که توسط ایمیل به کاربر ارسال می شود :

1
2
3
Error: [512] Value must be 1 or below
Webmaster has been notified
                <button></button>

در نهایت، متن ایمیل خطایی که کاربر دریافت می کند، به صورت زیر خواهد بود :

1
2
Error: [512] Value must be 1 or below
                <button></button>

البته ارسال خطا به وسیله ایمیل در موارد حیاتی ضروریت داشته و مابقی error ها را بایستی توسط سیستم ثبت کننده خطاهای PHP در فایل log ذخیره نمود.

1402/06/06 11582 2580
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...