1. morris worm

    morris worm Developer

    الأنتساب:
    ‏15 ابريل 2014
    المشاركات:
    11
    الإعجابات المتلقاة:
    5
    نقاط الجائزة:
    3

    [​IMG]

    التعامل مع الأخطاء جزء مهم جدا في البرمجة، اذا برنامجك يفتقر الى معالجة الأخطاء فقد يبدو البرنامج غير احترافي وقد يتعرض لمشاكل أمنية.

    الجزء الأول : أنواع الأخطاء في لغة php

    هناك ثلاث اخطأء أساسية :

    1 - أخطاء نحوية Syntactical error

    هذا الخطأ يعني انك لم تتبع قواعد لغة php، وطبعا البرنامج ماراح يكمل تنفيذه،

    مثلا لما تعرف متغير بدون وضع علامة الدولار $، مثال :

    كود PHP:
    <?php
    test 
    5;
    ?>
    وراح نحصل على خطأ مثل هذا :

    كود:
    Parse error: syntax error, unexpected '=' in /var/www/s3c-k.com/error_handling.php on line 2
    



    أمثلة أخرى عن هذه الأخطاء :

    - عند استخدام دالة تكون غير معرفة.
    كود PHP:
    hello();
    Error :

    كود:
    Fatal error: Call to undefined function hello() in /var/www/s3c-k.com/error_handling.php on line 2
    - عندما ننسى اضافة الفاصلة المنقوطة في نهاية كل تعليمة

    كود PHP:
    <?php

    echo "Hello "

    echo "World";

    ?>
    Error :

    كود:
    Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';' in /var/www/s3c-k.com/error_handling.php on line 5
    
    -
    كيفية اصلاحها ؟

    في الخطأ السابق، يوضح لك نوع الخطأ وايضا السطر اللي موجود فيه الخطأ، فلإصلاحه ببساطة نذهب للسطر الموجود فيه الخطأ ونتأكد من الأخطاء النحوية اللي وقعنا فيها ونصححها.

    2 - أخطاء وقت التشغيل runtime Error :

    أخطاء وقت التشغيل، تعني ان البرنامج صحيح لغويا ولكن ظهر خطأ أثناء تشغيل السكريبت،

    مثلا عندما تستخدم متغير بدون ماتعرفه، مثال :

    كود PHP:
    <?php

    echo ($test);
    echo 
    "s3c-k.com\n";

    ?>
    هنا مثلا مانلاحظ، المتغير test غير معرف، لذا راح نحصل على خطأ مثل هذا مثلا :

    كود:
    Notice: Undefined variable: test in /var/www/s3c-k.com/error_handling.php on line 3
    
    وطبعا البرنامج راح يكمل تنفيذه، يعني انه سيطبع s3c-k.com.

    3 - أخطاء منطقية Logical Errors :

    الأخطاء المنطقية تعني أن الكود صحيح لغويا وخالي من الأخطاء، ولكن السكريبت لايؤدي ماتتوقعه منه، وهذا النوع يعد من أصعب الأخطاء.

    مثلا لنفرض اننا نريد نعمل سكريبت يطبع جمع العدد 10 و 20،

    كود PHP:
    <?php
    $number1 
    10;
    $number2 20;

    echo 
    $number1 $number2;
    ?>
    طبعا الكود واضح جدا، عرفنا متغير number1 وحطينا فيه القيمة 10، ومتغير آخر number2 حطينا فيه القيمة 20، ثم في السطر الأخير وقعنا في خطأ منطقي، وهو بدلا من كتابة $number1 + $number2 يعني للجمع، كتبنا علامة الضرب، وبالتالي كان من المفروض ان السكريبت يطبع لنا 30، فطبعا لنا 200 :(.

    كيفية اصلاح الخطأ ؟

    لاتوجد اي طريقة لتصحيح هذا النوع من الأخطاء، لذا عليك ان تصححه بنفسك.

    الجزء الثاني : التعامل مع الأخطاء

    في هذا الجزء راح نتعلم كيفية التعامل مع الأخطاء :

    1 - باستخدام الدالة die ().
    2 - باستخدام error_reporting.
    3 - بإستخدام Error Control Operators

    1 - الطريقة الأساسية للتعامل مع الأخطاء بإستخدام الدالة die().

    أولا، لنفرض انه لدينا سكريبت يحتوي على مايلي :

    كود PHP:
    <?php
    $file
    =fopen("welcome.txt","r");
    ?>
    طبعا الكود بسيط جدا وواضح، فقط يقوم بفتح الملف welcome.txt للقراءة.

    ولكن اذا كان الملف welcome.txt غير موجود، فراح يطلع لنا خطأ مثل هذا مثلا :

    كود PHP:
    Warningfopen(welcome.txt): failed to open streamNo such file or directory in /var/www/s3c-k.com/error_handling.php on line 2
    الآن من أجل منع حصول هذه الأخطاء، فراح نستعمل الدالة file_exists والتي تقوم بالتأكد من وجود الملف أولا قبل فتحه باستخدام fopen

    كود PHP:
    <?php
    if (!file_exists ("welcome.txt"))
    {
        die (
    "\"welcome.txt\"File not found");
    }
    else
    {
        
    $file fopen ("welcome.txt""r");
    }
    ?>
    الآن اذا كان الملف غير موجود فمراح يظهر له هذاك الخطأ السابق، راح يظهر له :

    كود:
    "welcome.txt" File not found
    
    وطبعا هذا الكود أكثر كفاءة واحترافية من الكود الأول، لأنه يستخدم آلية معالجة الأخطاء، وايقاف السكريبت اذا وجد خطأ ما.

    ولكن ايقاف السكريبت ليس جيدا دائما، لذا سوف نلقي نظرة على طرق أخرى بديلة للتعامل مع الأخطاء

    2 - بإستخدام الدالة error_reporting.

    هذي الدالة تقوم باخفاء الأخطاء، والدالة بتاخذ معامل واحد يحدد نوع الأخطاء التي تريد إخفائها.

    قد يكون واحد من هذه الأنواع :

    E_WARNING
    E_NOTICE
    E_USER_ERROR
    E_USER_WARNING
    E_USER_NOTICE
    E_RECOVERABLE_ERROR
    E_ALL

    * اذا أردت اخفاء كل الأخطاء مهما كانت فنمرر القيمة 0 او NULL للدالة error_reporting، مثال :

    كود PHP:
    <?php
    error_reporting 
    (0);
    fopen ("welcome.txt""r");
    ?>
    هنا، اذا كان الملف welcome.txt مش موجود فماراح يظهر لك ولاخطأ.

    3 - بإستخدام Error Control Operators

    الError Control Operators هو المعامل @، عندما نضعه قبل تعليمة ما، فسوف يقوم بتجاهل كل الأخطاء الناتجة عن تلك التعليمة

    مثال :

    كود PHP:
    <?php
    $file 
    = @fopen ("welcome.txt""r");
    ?>
    لو كان الملف welcome.txt مش موجود فماراح يظهر ولا خطأ.

    وتوجد طريقة، أفضل هي Exception Handling، راح اشرحها في الدرس القادم ان شاء الله.

    والسلام عليكم ورحمة الله وبركاته

    :D

     
  2. or0

    or0 V • I • P

    الأنتساب:
    ‏22 فبراير 2014
    المشاركات:
    392
    الإعجابات المتلقاة:
    14
    نقاط الجائزة:
    18
    رد: التعامل مع الأخطاء Error Handling

    شكرا لك عزيزي .
     
  3. BEN LADEN _DZ

    BEN LADEN _DZ Developer

    الأنتساب:
    ‏10 يونيو 2012
    المشاركات:
    40
    الإعجابات المتلقاة:
    1
    نقاط الجائزة:
    8
    الإقامة:
    D_Z
    رد: التعامل مع الأخطاء Error Handling

    وعليكم السلام ورحمة الله وبركاته
    يعطيك العافية يا غالي على الموضوع الرائع
    واصل ابداعك اخي :{2}:
     
  4. Ubuntu

    Ubuntu Developer

    الأنتساب:
    ‏6 يناير 2013
    المشاركات:
    62
    الإعجابات المتلقاة:
    2
    نقاط الجائزة:
    8
    رد: التعامل مع الأخطاء Error Handling

    .. الله يعطيك العـأإفية ..
     

مشاركة هذه الصفحة