معالجة الخطأ الافتراضي في PHP بسيط جدا. يتم إرسال رسالة خطأ مع اسم الملف، رقم السطر ورسالة تصف الخطأ إلى المستعرض.
PHP معالجة خطأ
عند إنشاء البرامج النصية وتطبيقات الويب، ومعالجة الخطأ هو جزء مهم. إذا التعليمات البرمجية يفتقر إلى رمز الخطأ التدقيق، قد تبدو البرنامج غير مهني جدا والتي قد تكون مفتوحة أمام المخاطر الأمنية.
هذا البرنامج التعليمي يحتوي على بعض من الخطأ الأكثر شيوعا فحص الأساليب في PHP.
وسوف نعرض مختلف أساليب معالجة الأخطاء:
- بسيط " die() " البيانات
- الأخطاء المخصصة ومشغلات خطأ
- الإبلاغ عن الأخطاء
خطأ الأساسية المناولة: استخدام die() وظيفة
يظهر المثال الأول سيناريو بسيط الذي يفتح ملف نصي:
<?php
$file=fopen("welcome.txt","r");
?>
حالة عدم وجود الملف قد تحصل على خطأ من هذا القبيل:
Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
لمنع المستخدم من الحصول على رسالة خطأ مثل واحد أعلاه، ونحن اختبار ما إذا كان الملف موجودا قبل أن تحاول الوصول إليه:
<?php
if(!file_exists("welcome.txt")) {
die("File not found");
}
else {
$file=fopen("welcome.txt","r");
}
?>
الآن إذا كان الملف غير موجود تحصل على خطأ من هذا القبيل:
File not found
رمز أعلاه هو أكثر كفاءة من التعليمات البرمجية السابقة، لأنه يستخدم آلية معالجة الأخطاء بسيطة لوقف النصي بعد الخطأ.
ومع ذلك، ببساطة وقف النصي ليست دائما على الطريق الصحيح للذهاب. دعونا نلقي نظرة على وظائف PHP بديلة عن الأخطاء المناولة.
إنشاء معالج خطأ مخصص
إنشاء معالج خطأ مخصصة بسيط جدا. نحن ببساطة إنشاء دالة خاصة التي يمكن استدعاؤها عند حدوث خطأ في PHP.
يجب أن تكون هذه وظيفة قادرة على التعامل مع ما لا يقل عن اثنين من المعلمات (مستوى الخطأ ورسالة الخطأ) ولكن يمكن أن تقبل ما يصل إلى خمسة معلمات (optionally: file, line-number, and the error context) :
بناء الجملة
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 | غير مميتة أخطاء وقت التشغيل. لا توقف تنفيذ البرنامج النصي |
8 | E_NOTICE | إشعارات وقت التشغيل. وجد النصي شيئا قد يكون خطأ، ولكن يمكن أن يحدث أيضا عند تشغيل برنامج نصي عادة |
256 | E_USER_ERROR | فادح الخطأ المقدم من المستخدمين. هذا هو مثل E_ERROR التي وضعتها مبرمج باستخدام PHP وظيفة trigger_error() |
512 | E_USER_WARNING | غير فادح تحذير المستخدم لتوليد. هذا هو مثل E_WARNING التي وضعتها مبرمج باستخدام PHP وظيفة trigger_error() |
1024 | E_USER_NOTICE | المستخدم إنشاء إشعار. هذا هو مثل E_NOTICE التي وضعتها مبرمج باستخدام PHP وظيفة trigger_error() |
4096 | E_RECOVERABLE_ERROR | خطأ فادح Catchable. هذا هو مثل E_ERROR لكن يمكن صيدها بواسطة مؤشر يحددها المستخدم (see also set_error_handler() ) |
8191 | E_ALL | كافة الأخطاء والتحذيرات (E_STRICT became a part of E_ALL in PHP 5.4) |
الآن دعونا إنشاء دالة لمعالجة الأخطاء:
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
رمز أعلاه هو بسيطة وظيفة معالجة الأخطاء. عندما يتم تشغيله، فإنه يحصل على مستوى الخطأ ورسالة خطأ. ومن ثم إخراج مستوى الخطأ ورسالة وإنهاء النصي.
والآن بعد أن قمنا بإنشاء وظيفة معالجة الأخطاء نحن بحاجة إلى أن تقرر متى ينبغي تشغيلها.
مجموعة معالج خطأ
معالج الأخطاء الافتراضية لPHP هو بنيت في معالج الأخطاء. نحن ذاهبون لجعل وظيفة فوق معالج الأخطاء الافتراضية لمدة النصي.
فمن الممكن لتغيير معالج خطأ لطلب فقط بعض الأخطاء، وبهذه الطريقة السيناريو يمكن معالجة أخطاء مختلفة بطرق مختلفة. ومع ذلك، في هذا المثال نحن نذهب لاستخدام لدينا معالج خطأ مخصصة لجميع الأخطاء:
set_error_handler("customError");
وبما أننا نريد وظيفة مخصصة لدينا لمعالجة كافة الأخطاء، و set_error_handler() يحتاج فقط معلمة واحدة، يمكن إضافة المعلمة الثانية لتحديد مستوى الخطأ.
مثال
اختبار معالج الأخطاء من خلال محاولة متغير الإخراج الذي لا وجود له:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
يجب أن يكون الإخراج من التعليمات البرمجية أعلاه شيئا من هذا القبيل:
Error: [8] Undefined variable: test
يؤدي خطأ
في السيناريو حيث يمكن للمستخدمين إدخال البيانات فمن المفيد أن يؤدي أخطاء عند حدوث المدخلات غير قانوني. في PHP، ويتم ذلك من قبل trigger_error() وظيفة.
مثال
في هذا المثال حدوث الخطأ إذا كان "test" المتغير هو أكبر من "1" :
<?php
$test=2;
if ($test>=1)
{
trigger_error("Value must be 1 or below");
}
?>
يجب أن يكون الإخراج من التعليمات البرمجية أعلاه شيئا من هذا القبيل:
Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6
يمكن أن تسبب خطأ في أي مكان كنت ترغب في السيناريو، وذلك بإضافة المعلمة الثانية، يمكنك تحديد ما أثار مستوى الخطأ.
أنواع الخطأ المحتملة:
- E_USER_ERROR - فادح خطأ وقت التشغيل المقدم من المستخدمين. الأخطاء التي لا يمكن استردادها من. وتوقف تنفيذ البرنامج النصي
- E_USER_WARNING - غير قاتلة تحذير وقت التشغيل المقدم من المستخدمين. لا توقف تنفيذ البرنامج النصي
- E_USER_NOTICE - افتراضي. إشعار وقت التشغيل المقدم من المستخدمين. وجد النصي شيئا قد يكون خطأ، ولكن يمكن أن يحدث أيضا عند تشغيل برنامج نصي عادة
مثال
في هذا المثال حدوث E_USER_WARNING إذا كان "test" المتغير هو أكبر من "1" . إذا حدث E_USER_WARNING سوف نستخدم لدينا معالج خطأ مخصصة وإنهاء النصي:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$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);
}
?>
يجب أن يكون الإخراج من التعليمات البرمجية أعلاه شيئا من هذا القبيل:
Error: [512] Value must be 1 or below
Ending Script
والآن بعد أن تعلمنا لخلق الأخطاء الخاصة بنا وكيفية تحريك لهم، دعونا نلقي نظرة على تسجيل الخطأ.
تسجيل خطأ
افتراضيا، PHP يرسل سجل خطأ في نظام تسجيل للملقم أو ملف، اعتمادا على كيفية إعداد التكوين error_log في ملف php.ini. باستخدام error_log() وظيفة يمكنك إرسال سجلات الخطأ إلى ملف محدد أو وجهة النائية.
يمكن إرسال رسائل الخطأ لنفسك عن طريق البريد الإلكتروني يكون وسيلة جيدة للحصول على إخطار من أخطاء محددة.
إرسال رسالة خطأ عن طريق البريد الإلكتروني
في المثال التالي سوف نرسل رسالة بالبريد الالكتروني مع رسالة خطأ وإنهاء النصي، في حالة حدوث خطأ معين:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//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);
}
?>
يجب أن يكون الإخراج من التعليمات البرمجية أعلاه شيئا من هذا القبيل:
Error: [512] Value must be 1 or below
Webmaster has been notified
والبريد الواردة من التعليمات البرمجية أعلاه يبدو مثل هذا:
Error: [512] Value must be 1 or below
هذا لا ينبغي أن تستخدم مع كافة الأخطاء. يجب أن تكون مسجلا الأخطاء العادية على الملقم باستخدام نظام PHP التسجيل الافتراضي.