أحدث البرامج التعليمية وتطوير الشبكة
×

PHP البرنامج التعليمي

PHP الصفحة الرئيسية PHP مقدمة PHP تثبيت PHP بناء الجملة PHP المتغيرات PHP صدى / طباعة PHP أنواع البيانات PHP سلاسل PHP الثوابت PHP مشغلي PHP If...Else...Elseif PHP Switch PHP في حين حلقات PHP لحلقات PHP وظائف PHP المصفوفات PHP فرز المصفوفات PHP Superglobals

PHP معالجة

PHP شكل معالجة PHP شكل التحقق من صحة PHP شكل مطلوب PHP شكل URL/E-mail PHP شكل كامل

PHP متقدم

PHP المصفوفات متعددة PHP التاريخ و الوقت PHP تتضمن PHP ملف معالجة PHP ملف فتح / قراءة PHP ملف إنشاء / كتابة PHP ملف تحميل PHP Cookies PHP Sessions PHP مرشحات PHP Filters متقدم PHP خطأ معالجة PHP استثناء

MySQL Database

MySQL قاعدة البيانات MySQL صلة MySQL Create DB MySQL Create الطاولة MySQL Insert Data MySQL الحصول على معرف آخر MySQL إدراج متعددة MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML موزعي PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX مقدمة AJAX PHP AJAX قاعدة البيانات AJAX XML AJAX بحث حي AJAX قارئ آر إس إس AJAX صندوق الاقتراع

PHP Examples

PHP أمثلة PHP اختبار قصير PHP شهادة

PHP مرجع

PHP مجموعة PHP تقويم PHP تاريخ PHP دليل PHP خطأ PHP نظام الملفات PHP فلتر PHP FTP PHP HTTP PHP Libxml PHP بريد PHP الرياضيات PHP متفرقات PHP MySQLi PHP SimpleXML PHP خيط PHP XML PHP Zip PHP المناطق الزمنية

 

PHP معالجة الأخطاء


معالجة الخطأ الافتراضي في 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 التسجيل الافتراضي.