درس معالجة الاخطاء والاستثناءات الجزء الاول







بسم الله الرحمن الرحيم وافضل الصلاة والتسليم على نبينا محمد صلى الله عليه وسلم سنتكلم في المقالة عن طرق تتبع الاخطاء في الكود البرمجي للغة البرمجة بي اتش بي وطرق التوصل الى الخطا ومعلومات عن الخطاء سنقوم في هذه المقالة شرح معلومات كيفية البحث عن الخطا

تحليل الخطا تتبع الكود سطر بسطر في حال تعذر الحصول على الخطا

رمز PHP:
error_reporting()
ini_set('display_errors',true);
  die();
  
trigger_error();
  
restore_error_handler();
  
set_error_handler();
   
error_log(); 

ان عملية اكتشاف اخطا الكود والعلل البرمجية من الاشياء محاطة بكثير من التعقيد ولقد وفرت لغات البرمجة عدة طرق للوصول اليها عبر دوال برمجية وكذلك برامج كتابةالاكواد توفر عدة اليات لهذه النقطة مثل التشغيل السطري للكود التنفيذ السطري لكتلة برمجية تتبع الاخطاء الهجائية والكتابة اول باول وتنقسم الاخطاء البرمجية الى عدة نقاط منها الاخطاء النحوية الاخطاء الاملائية الاخطاء التركيبية اخطاءالغير متوقعة اخطاء الكود المهمة الاخطاء النحوية هي اخطاء التي تتعلقبشروط لغة البرمجة الاساسية كالفااصلة المنقوطة والاقواس وغيرها الاخطاء الاملائية هي عدم كتابة كلمة محجوزة بشكل صحيح ممايتيح عن عدم توفر هذه الكلمة في قائمة الدوال او التعليمات البرمجية الاخطاء التركيبية وهي اخطاء تكون من بنية اللغة اي ان اللغة لاتدعم تلك المميزة وانها غير متوفرة مثل توصيف الكائنات في بي اتش بي اربعة وغيرها م الاخطاء الغير متوقعة مثلا فشل في الحصول على قيمة محددة اونتيجة ما غير صحيحة تكرار غير ملائم او شرط غير صحيح او تركيب شروط متداخلة اخطاء الكود المهمة وهي جزء اساسي ومهم وهي ان الكود لايقوم بالمهمة المنوطة له بشكل صحيح وان النتائج غير مرغوب بها هذا بشكل عام جزء من اهم الاخطاءفي الكود البرمجي طرق حل الكود الطريقة الاولى وهي السريعة الغاء نظرة على الكود وتفحص الكود بشكل كامل هل النتيجة تطابق المطلوب ام لا الطريقة الاخرى تشغيل الكود كتلة كتلة مثلا فصل الدوال واجراء تشتغيل مستقل لكل دالة على حدى الطريقة الاخرى عبر تشغيل الكود سطر بسطر وايقاف الكود التالي عبر دالة

رمز PHP:
exit 

ثم النزول سطر اسفل وهكذا حتى نصل الى نهاية الكود ولمتابعة الكود نقوم باستخدام

رمز PHP:
echo 

لمتابعة اولية الطريقة الاخرى عبر دوال اللغة المستخدمة لاظهار الاخطاء

رمز PHP:
error_reporting(); 

تقوم الدالة بتحديد توجيه عرض االاخطاء اثناء التشغيل ولها عدة مستويات تحدد ماهي الاخطاء المراد اظهارها وهو البارمتر المطلوب للدالة وفيها ثوابت متعددة وهذه قائمة بالثوابت

رمز PHP:
القيمة     الثابت          الوصف 
1         E_ERROR          الاخطاء القاتلة وهي الاخطاء التي لايمكن اكمال تنفبذ الكود بعدها
2         E_WARNING     الاخطاء القاتلة التي لايمكن استكمال تنفيذ الكود بعدها
4         E_PARSE           اخطاء الترجمة اي خطا في كتابة تعليمة مااو كتلة محجوزة
8         E_NOTICE           عدم تعريف متغير او انه غير مستخدمالاخطاء التنبيهية مثل
16         E_CORE_ERROR      الاخطاء القاتلة المولدة في صميم بي اتش بي اي في نواتها
32         E_CORE_WARNING  الاخطاء التحذيرية المولدة من صميم بي اتش بي اي في نواتها
64         E_COMPILE_ERROR  الاخطاء القاتلة المولدة من قبل محرك بي اتش بي
128     E_COMPILE_WARNING  االخطاء التحذيرية المولدةمن محرك بي اتش بي
256     E_USER_ERROR  الاخطاء القاتلة المولدة من قبل المبرمج
512     E_USER_WARNING   الاخطاء التحذيرية المولدة من قبل المبرمج
1024     E_USER_NOTICE  الاخطاء التنبيهية المولدة من قبل المبرمج
6143     E_ALL  كل الاخطاء
2048     E_STRICT  الاخطاء المولدة من قبل بي اتش بي لاقتراح استخدام افضل لرمزك
4096     E_RECOVERABLE_ERROR  الخطاء القاتل القابل للمسك الذي يحدد ان التطبيق غير قابل للاستقرار وهو عادة متعلق بالدالةset_error_handler 

مثال

رمز PHP:
error_reporting(); 

واذا اردت دمج اكثر من نوع نقوم باستخدام المعاملات الثنائية

رمز PHP:

مثال

رمز PHP:
error_reporting(E_WARNING|E_PARSE

ولنفي نوع ما نستخدم علامة

رمز PHP:

مثال

رمز PHP:
error_reporting (EE_ALL E_NOTICE); 

 

الدالة

رمز PHP:
ini_set('display_errors',true); 

تقوم هذه الدالة بتعديل ملف ال php.ini اي ملف الاعدادات للسيرفر بحيث تقوم بتغير قيمة عرض الاخطاء اي

رمز PHP:
display_errors 

الى true التمكين وبذلك تحصل على عرض للاخطاء في صفحة الكود عند تنفيذها الدالة die('نص'); تقوم هذه الدالة بعرض نص في حال عدم تنفيذ دالة ما مثلا

رمز PHP:
    mysql_connect('','','','') or die('لايمكن الاتصال بقاعدة البيانات'); 

 

وهي دالة مكافئة للدالة

رمز PHP:
    exit(); 

 

الدالة

رمز PHP:
trigger_error() 

تقوم هذه الدالة باطلاق حدث بواسطة المستخدم وتاخذ بامترين الاول هو نص المراد اظهاره والبارمتر الثاني هو رقم الخطا مثال

رمز PHP:
if (assert($divisor == 0)) {
    
trigger_error("لايمكن القسمة على صفر"E_USER_ERROR);

 

الدالة

رمز PHP:
set_error_handler() 

تقوم هذه الدالة باسناد مقبض لدالة الخطا وتقوم بتنفيذها عند اطلاق الخطا وتاخذ بارمتر وهو اسم الدالة المراد تفعيلها وقت حدوث الخطا ويقوم هذ المقبض بارسال عدة بارسال عدة بارمتراتن للتعامل مع الخطا رقم الخطا النص المراد اظهاره عند حدوث الخطا ملف الذي يوجد به الخطا رقم السطر الذي يحتوي عللى الخطا مثال على ذلك

رمز PHP:
function myErrorHandler($errno$errstr$errfile$errline){
    switch (
$errno) {
        case 
E_USER_ERROR:
            echo  
$errstr$errfile$errline;
    }

}
function 
t($r){
    if (
$r!=5) {
        
trigger_error("غير مساوي"E_USER_ERROR);
    }
}
set_error_handler("myErrorHandler");
t(10); 

 

الدالة

رمز PHP:
restore_error_handler()
تقوم هذه الدلة باعادة مقبض الاخطاء الى الوضع الافتراضي وهو محرك بي اتش بي 

 

رمز PHP:
error_log(); 

تقوم هذه الدالة بارسال الخطا الى مكان ما مثلا بريد الكتروني ملف برمجي او اظهاره مباشرة وتاخذ بارمترات اجبارية واختيارية الاول هو نص المراد ارساله الثاني رقم الخطا الثالث المكان المراد ارساله اليه مثلا بريد او ملف الرابع في حال كان بريد الكتروني واردت ارسال هيدرات للبريد يمكنك عبر البارمتر الرابع راجع دالة mail مثال

رمز PHP:
 error_log("ok"0); 

 

رمز PHP:
 error_log("ok"0,'/e.php');
error_reporting,ini_set, die, restore_error_handlerset_error_handler,error_log 

 

رمز PHP:
     $headers 'From: [email protected]"\r\n" .
    
'Reply-To: [email protected]"\r\n" .
    
'X-Mailer: PHP/' phpversion();
 
error_log("ok"0,'[email protected]',$headers); 

 

انتهي الدرس

 


http://www.traidnt.net/vb/showthread.php?t=1744081