النتائج 1 إلى 7 من 7

الموضوع: إختراع العجلة من جديد - لماذا التعب؟!

  1. #1
    عضو فعال جدا
    تاريخ التسجيل
    Sep 2000
    المشاركات
    2,029

    إختراع العجلة من جديد - لماذا التعب؟!



    سلام عليكم

    أتذكر قبل سنوات وفي فصل دراسي عن البرمجة، كنا ندرس Qbasic، وفي الحقيقة كنا ندرس أساسيات البرمجة، أتذكر أننا كنا نقضي وقتنا في إيجاد الحلول لمشاكل منطقية والتخطيط للبرامج أكثر مما كنا نتعلم اللغة، وكان أستاذنا يعطينا بعض التلميحات المفيدة، كقوله: لا تعد إختراع العجلة! أي لا تقم بكتابة أوامر لتنفذ لك ما هو متوفر أصلاً في لغة البرمجة.

    اليوم وجدت طريقة لإظهار رسائل الأخطاء بشكل جيد في PHP، بدلاً من الشكل التقليدي للأخطاء، في هذه المقالة 10 PHP Functions I Bet You Didn't Know About! لكن ظهرت مشكلة صغيرة، وهي أن الخطأ الذي يقول (Undefined index) وكذلك الخطأ (Undefined variable) يظهران بشكل متكرر في كل الملفات، فقمت بتعديل الطريقة قليلاً.

    الأوامر حسب ما جاءت في المقالة مع تعريب الجمل:
    كود PHP:
    function my_error_handler ($errno$errstr$errfile$errline$errcontent) {
    echo 
    "<font color='red'><b>حدث خطأ ما!</b></font><br>";
    echo 
    "<b>رقم الخطأ:</b> $errno<br>";
    echo 
    "<b>وصف الخطأ:</b> $errstr<br>";
    echo 
    "<b>الخطأ في ملف:</b> $errfile<br>";
    echo 
    "<b>الخطأ في السطر:</b> $errline<br>";

    قمت بتعديل الأوامر بحيث لا تظهر الأخطاء التي ذكرتها سابقاً:
    كود PHP:
    function my_error_handler ($errno$errstr$errfile$errline$errcontent) {
         if (
    $errno == 8) {
              
    $errno "";
         } else {
              echo 
    "<font color='red'><b>حدث خطأ ما!</b></font><br>";
              echo 
    "<b>رقم الخطأ:</b> $errno<br>";
              echo 
    "<b>وصف الخطأ:</b> $errstr<br>";
              echo 
    "<b>الخطأ في ملف:</b> $errfile<br>";
              echo 
    "<b>الخطأ في السطر:</b> $errline<br>";
         }

    الآن ما علاقة العجلة بالموضوع؟!!
    هل إضافة دالة لإظهار الأخطاء تستحق التعب؟ لأنني أشعر بأنني أعيد اختراع العجلة، ثم هل التعديل الذي أجريته لمنع رسائل الخطأ من الظهور صحيح؟ أم هناك طريقة أفضل؟





    سردال غير متواجد حالياً


  2. #2
    عضو نشيط
    تاريخ التسجيل
    Apr 2003
    المشاركات
    283


    اتوقع ان حلك غير مجدي

    لانه لو حدث خطأ عن السطر 8 لن يحتسبة وبذلك لن تظهر رسالة خطأ في حالة وجود خطأ

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

    يعني يفترظ انك تمرر دالتك الخاصة بهذا الشكل

    كود PHP:
    <?
    set_error_handle
    ("my_error_handler");
    ايضا الاخطأ مستويات او انواع بعضها تستطيع التعديل عليها بستخدام الدالة السابقة والبعض الاخر لا يمكن التعديل عليه ...
    بحسب اعدادات ال php في السيرفر

    http://www.php.net/manual/en/functio...or-handler.php

    ايضا يوجد دالة سهلة الاستخدام فقط قم بتمرير الخطأ ونوعة
    الدالة trigger_error
    هذه الدالة لا تعمل الا مع ثلاث انواع هي اخطأ E_USER
    وهي
    E_USER_ERROR
    E_USER_WARNING
    E_USER_NOTICE

    اذا لم تمرر نوع الخطأ راح يكون النوع الافتراضي E_USER_NOTICE

    http://www.php.net/manual/en/function.trigger-error.php

    مثال لاستخدامها
    كود PHP:
    trigger_error("الخطأ"E_USER ); 
    مثال تطبيقي
    كود PHP:
    // custom error handler
    function eh($type$msg$file$line$context)
    {
        echo 
    "<h1>Error!</h1>";
        echo 
    "An error occurred while executing this script. Please
    contact the <a href=mailto:webmaster@somedomain.com>webmaster</a> to
    report this error."
    ;
        echo 
    "<p>";
        echo 
    "Here is the information provided by the script:";
        echo 
    "<hr><pre>";
        echo 
    "Error code: $type<br>";
        echo 
    "Error message: $message<br>";
        echo 
    "Script name and line number of error: $file:$line<br>";
        echo 
    "Variable state when error occurred: <br>";
        
    print_r($context);
        echo 
    "</pre><hr>";
    }

    // define a custom error handler
    set_error_handler("eh");

    // string
    $string "Mary had a little lamb";

    // this will generate an E_WARNING
    join(''$string);
    ?> 
    تستطيع الوصول لاسم الملف بستخدام __FILE__
    ورقم السطر __LINE__


    هذا كل ما اعرف عن هذا الموضوع





    rafia غير متواجد حالياً

  3. #3
    عضو فعال جدا
    تاريخ التسجيل
    Sep 2000
    المشاركات
    2,029


    rafia: أنا أريد أن أمنع بعض رسائل الأخطاء مثل الخطأ رقم 8، لأنه مجرد ملاحظة لا تضر ولا تنفع، لكن سأجرب طريقة أخرى.





    سردال غير متواجد حالياً

  4. #4
    عضو نشيط
    تاريخ التسجيل
    May 2002
    المشاركات
    137


    إذا كنت تريد منع نوع من الأخطاء فقط فإن الأولى استخدام دالة error_reporting كما في المثال التالي:
    كود PHP:
     // منع ظهور جميع رسائل الأخطاء
     
    error_reporting(0);

    // منع رسائل الملاحظات أو مستوى الخطأ رقم 
    // 8
     
    error_reporting(2047 8);

    // إظهار جميع رسائل الأخطاء
    error_reporting(E_ALL); 
    كما يمكن وضع تلك الإعدادات في ملف php.ini ،للمزيد من المعلومات حول التحكم بظهور رسائل الأخطاء راجع www.php.net/error_reporting
    أما ما ذكرتموه حول الدالة set_error_handler فهو يستخدم لإظهار رسائل مختلفة من الأخطاء بدلاً من الطريقة الاعتيادية وليس الطريقة الصحيحة لمنع ظهور نوع من الأخطاء.





    __________________
    visualmind (at) php.net
    أعتذر كثيراً عن غيابي من المشاركات والذي لن يطول أكثر إن شاء الله.
    VisualMind غير متواجد حالياً

  5. #5
    عضو فعال جدا
    تاريخ التسجيل
    Sep 2000
    المشاركات
    2,029


    قررت الاستغناء تماماً عن الدالة الخاصة بالأخطاء
    لأنني حاولت وبكل الطرق منع الملاحظات واستخدمت الأمر error_reportin لكن لا فائدة





    سردال غير متواجد حالياً

  6. #6
    عضو نشيط
    تاريخ التسجيل
    May 2002
    المشاركات
    137


    أخي سردال، لم تجد أي تغيير بعد استخدامك للدالة error_reporting ؟؟
    حاول التأكد من إعدادات php.ini إن أمكنك ذلك، وإذا لم تنجح معك كل الحلول يمكنك كتم الخطأ في أي مكان باستخدام الإشارة @، كما في المثال التالي:
    كود PHP:
    <?php

    // This will cause a notice error display 
    $n $var[test];

    // This will mute the notice error
    @$n $var[test];

    ?>
    بالرغم من أن error_reporting(E_ALL & ~E_NOTICE) كفيلة بأن توقف رسائل الأخطاء من النوع NOTICE أو (8) كما ذكرت سابقاً





    __________________
    visualmind (at) php.net
    أعتذر كثيراً عن غيابي من المشاركات والذي لن يطول أكثر إن شاء الله.
    VisualMind غير متواجد حالياً

  7. #7
    عضو فعال
    تاريخ التسجيل
    Nov 2002
    المشاركات
    1,092


    شرح جميل





    __________________
    البريد
    almuslim@gmail.com
    الماسنجر
    muslem@php.net
    Mr.Muslem غير متواجد حالياً





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض