Latest web development tutorials
×

PHP مسار

PHP مسار PHP مقدمة موجزة PHP تثبيت PHP قواعد PHP متغير PHP echo/print PHP أنواع البيانات PHP ثابت PHP سلسلة PHP مشغلي PHP If...Else PHP Switch PHP مجموعة PHP فرز مجموعة PHP Superglobals PHP While تداول PHP For تداول PHP وظيفة PHP المتغيرات السحرية PHP مساحات PHP الشيئية

PHP شكل

PHP شكل PHP مصادقة النماذج PHP شكل - الحقول المطلوبة PHP شكل - البريد الإلكتروني التحقق وURL PHP المثال شكل كامل PHP $_GET متغير PHP $_POST متغير

PHP دروس متقدمة

PHP المصفوفات متعددة الأبعاد PHP تاريخ PHP احتواء PHP ملف PHP تحميل ملف PHP Cookie PHP Session PHP E-mail PHP أمن E-mail PHP Error PHP Exception PHP فلتر PHP فلتر متقدم PHP JSON

PHP 7 الميزات الجديدة

PHP 7 الميزات الجديدة

PHP قاعدة بيانات

PHP MySQL مقدمة موجزة PHP MySQL صلة PHP MySQL إنشاء قاعدة بيانات PHP MySQL إنشاء جدول بيانات PHP MySQL إدراج بيانات PHP MySQL إدراج بيانات متعددة PHP MySQL القوائم المعدة PHP MySQL قراءة البيانات PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX مقدمة موجزة AJAX PHP AJAX قاعدة بيانات AJAX XML AJAX البحث في الوقت الحقيقي AJAX RSS Reader AJAX تصويت

PHP الدليل المرجعي

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP معالجة الصور PHP RESTful

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 نظام التسجيل الافتراضية لتسجيل على الخادم.