PHP معالجة خطأ
في PHP، ومعالجة الأخطاء الافتراضي هو بسيط جدا. يتم إرسال رسالة خطأ إلى مستعرض، الرسالة مع اسم الملف، رقم السطر ووصف رسالة الخطأ.
PHP معالجة خطأ
عند إنشاء البرامج النصية وتطبيقات الويب، ومعالجة الخطأ هو جزء مهم. إذا التعليمات البرمجية يفتقر إلى رمز الخطأ التدقيق، قد تبدو البرنامج غير مهني جدا، ولكن أيضا يفتح الباب أمام المخاطر الأمنية.
هذا البرنامج التعليمي يقدم بعض من الأكثر أهمية في PHP طريقة اكتشاف الخطأ.
سوف نشرح لكم مختلف أساليب معالجة الأخطاء:
- بسيط "يموت ()" بيان
- الأخطاء المخصصة ومشغلات خطأ
- تقرير عن الخطأ
خطأ الأساسية المناولة: استخدام يموت وظيفة ()
يظهر المثال الأول نصي بسيط هو أن يفتح ملف نصي:
<?php $file=fopen("welcome.txt","r"); ?>
إذا لم يكن الملف موجودا، سوف تحصل على خطأ من هذا القبيل:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
لمنع المستخدمين من الحصول على رسالة خطأ مشابهة لما سبق، درسنا الملف قبل الوصول إلى ملف موجود:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
الآن، إذا لم يكن الملف موجودا، سوف تحصل رسالة الخطأ هذه مشابهة إلى:
文件不存在
مقارنة مع القانون السابق، رمز أعلاه هو أكثر كفاءة، لأنه يستخدم آلية معالجة الأخطاء بسيطة لإنهاء البرنامج النصي بعد الخطأ.
ومع ذلك، ببساطة إنهاء السيناريو هو ليس دائما الطريق الصحيح. دعونا نلقي نظرة على وظائف PHP بديلة لمعالجة الأخطاء.
إنشاء معالج خطأ مخصص
إنشاء معالج خطأ مخصصة بسيط جدا. نحن ببساطة إنشاء دالة خاصة التي يمكن استدعاؤها عند حدوث خطأ في PHP.
ويجب أن تكون هذه الوظيفة قادرة على التعامل مع اثنين على الأقل من المعلمات (مستوى الخطأ ورسالة خطأ)، ولكن يمكن أن تقبل ما يصل إلى خمسة المعلمات (اختياريا: ملف، في خط رقم والسياق الخطأ):
قواعد
error_function(error_level,error_message, error_file,error_line,error_context)
المعلمات | وصف |
---|---|
error_level | المطلوبة. ويعرف الخطأ كمستوى الإبلاغ عن الأخطاء المعرفة من قبل المستخدم. يجب أن يكون رقم. راجع الجدول التالي: مستوى التقارير خطأ. |
ERROR_MESSAGE | المطلوبة. وذكرت رسالة خطأ خطأ معرف من قبل المستخدم. |
error_file | اختياري. حدث متصفحك الخطأ المحدد. |
ERROR_LINE | اختياري. سلفا رقم السطر وقوع الخطأ. |
error_context | اختياري. تحدد مجموعة تحتوي على كل متغير عند حدوث خطأ في استخدام وقيمهم. |
مستوى الإبلاغ عن الأخطاء
هذه المستويات التقرير عن الخطأ هي أنواع مختلفة من الأخطاء خطأ معالجة مخصصة معالج:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
الآن، دعونا إنشاء دالة لمعالجة الأخطاء:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
رمز أعلاه هو بسيطة وظيفة معالجة الأخطاء. عندما يتم تشغيله، وسوف تحصل على مستوى الخطأ ورسائل الخطأ. ومن ثم إخراج مستوى الخطأ ورسالة وإنهاء النصي.
الآن، وقد انشأنا وظيفة معالجة الأخطاء، ونحن بحاجة لتحديد متى يتم تحريك وظيفة.
وضع معالج الأخطاء
معالج الأخطاء الافتراضية PHP هو المدمج في معالج الأخطاء. نحن نذهب لتحويل وظيفة فوق مدة معالج الأخطاء الافتراضية من البرنامج النصي.
يمكنك تعديل معالج الأخطاء بحيث لا ينطبق إلا على بعض الخطأ، وبالتالي فإن السيناريو يمكن أن يكون بطرق مختلفة لمعالجة الأخطاء مختلفة. ومع ذلك، في هذه الحالة، ونحن نعتزم استخدام لجميع معالج الأخطاء خطأ عادتنا:
set_error_handler("customError");
وبما أننا نريد وظيفة مخصصة لدينا للتعامل مع جميع الأخطاء، set_error_handler () يحتاج فقط معلمة واحدة، يمكنك إضافة الحجة الثانية لتحديد مستوى الخطأ.
أمثلة
من خلال محاولة متغير الإخراج الذي لم يكن موجودا، لاختبار معالج خطأ:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
إخراج التعليمات البرمجية أعلاه كما يلي:
Error: [8] Undefined variable: test
خطأ الزناد
في البرنامج النصي إدخال البيانات موقع المستخدم عندما لا يتم تشغيل إدخال المستخدم عند حدوث خطأ مفيد. في PHP، ويتم ذلك بواسطة الدالة trigger_error () لإكمال.
أمثلة
في هذا المثال، إذا كان "اختبار" المتغير هو أكبر من "1"، يحدث خطأ:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
إخراج التعليمات البرمجية أعلاه كما يلي:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
يمكنك تحريك خطأ في البرنامج النصي في أي مكان، وذلك بإضافة المعلمة الثانية، يمكنك تحديد يتم تشغيل مستوى الخطأ.
الأنواع الممكنة من الأخطاء:
- E_USER_ERROR - فادح خطأ وقت التشغيل المقدم من المستخدمين. خطأ غير قابل للاسترداد. تنفيذ السيناريو هو توقف.
- E_USER_WARNING - غير قاتلة تحذير وقت التشغيل المقدم من المستخدمين. لا توقف تنفيذ البرنامج النصي.
- E_USER_NOTICE - الافتراضي. إشعار وقت التشغيل المقدم من المستخدمين. عندما وجدت السيناريو قد يحدث خطأ، ولكن قد تحدث أيضا في السيناريو عملية عادية.
أمثلة
في هذا المثال، إذا كان "اختبار" المتغير هو أكبر من "1"، يحدث خطأ E_USER_WARNING. إذا حدث هذا E_USER_WARNING، سوف نستخدم لدينا معالج خطأ مخصصة وإنهاء النصي:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
إخراج التعليمات البرمجية أعلاه كما يلي:
Error: [512] 变量值必须小于等于 1 脚本结束
والآن بعد أن تعلمنا كيفية إنشاء خطأ الخاص بك، وكيفية تحريك لهم، دعونا ننظر إلى سجل خطأ.
سجل خطأ
في حالة التخلف عن السداد، وفقا لتعيين التكوين error_log في ملف php.ini، PHP يرسل نظام تسجيل الخطأ لتسجيل أو خادم ملفات. باستخدام error_log () وظيفة يمكنك إرسال سجلات الخطأ إلى ملف محدد أو وجهة النائية.
فهو يرسل رسالة خطأ لنفسك عن طريق البريد الإلكتروني هو وسيلة جيدة للحصول على إخطار من أخطاء محددة.
يتم إرسال رسالة خطأ عن طريق البريد الإلكتروني
في المثال التالي، في حالة حدوث خطأ معين، وسوف نرسل رسالة بالبريد الالكتروني مع رسالة خطأ وإنهاء النصي:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
إخراج التعليمات البرمجية أعلاه كما يلي:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
الرسائل الواردة من التعليمات البرمجية أعلاه كما يلي:
Error: [512] 变量值必须小于等于 1
هذه الطريقة ليست مناسبة لجميع الأخطاء. وينبغي أن يكون الخطأ التقليدي باستخدام PHP نظام التسجيل الافتراضية لتسجيل على الخادم.