🟦 أولًا: ما هو الخطأ (Error) في PHP؟
الخطأ هو حالة غير طبيعية تحدث أثناء تنفيذ البرنامج وتؤدي إلى توقفه أو ظهور نتائج غير صحيحة. PHP تُصدر أنواعًا مختلفة من الأخطاء حسب طبيعتها وخطورتها.
🟦 ثانيًا: أنواع الأخطاء في PHP
1. Notice
🔹 إشعار بخطأ غير خطير، لا يوقف تنفيذ البرنامج.
مثال:
echo $x; // $x غير معرف مسبقًا
PHP2. Warning
🔹 خطأ متوسط الخطورة، لا يوقف التنفيذ لكن قد يؤدي إلى مشاكل.
مثال:
include("file.php"); // الملف غير موجود
PHP3. Fatal Error
🔴 خطأ قاتل، يوقف تنفيذ البرنامج مباشرة.
مثال:
undefinedFunction(); // استدعاء دالة غير موجودة
PHP4. Parse Error (Syntax Error)
🔴 خطأ في الكتابة (الصياغة) يمنع تشغيل الملف أصلًا.
مثال:
echo "Hello // نسيان إغلاق علامة التنصيص
PHP🟦 ثالثًا: إعدادات عرض الأخطاء
1. display_errors
🔹 تتحكم بإظهار الأخطاء في المتصفح (مفيدة أثناء التطوير).
2. error_reporting
🔹 تحدد أنواع الأخطاء التي سيتم عرضها.
✅ تفعيل عرض الأخطاء داخل الكود:
ini_set('display_errors', 1);
error_reporting(E_ALL);
PHP⚠️ لا يُنصح بإظهار الأخطاء للمستخدم النهائي في المواقع الحية (production)، بل تُسجل في ملف.
🟦 رابعًا: دوال التعامل مع الأخطاء
1. error_reporting()
error_reporting(E_ALL); // عرض كل أنواع الأخطاء
PHP2. trigger_error()
– إنشاء خطأ مخصص
trigger_error("هذه رسالة خطأ مخصصة", E_USER_WARNING);
PHP3. set_error_handler()
– تعيين دالة مخصصة للتعامل مع الأخطاء
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "⚠️ [$errno] $errstr في $errfile على السطر $errline";
}
set_error_handler("myErrorHandler");
PHP🟦 خامسًا: التعامل مع الاستثناءات Try / Catch
✅ مثال أساسي:
try {
throw new Exception("حدث خطأ ما!");
} catch (Exception $e) {
echo "تم الإمساك بالاستثناء: " . $e->getMessage();
}
PHP
throw
تُستخدم لرمي الاستثناءtry
تُستخدم لتجربة تنفيذ كود يحتمل الخطأcatch
تُستخدم لإمساك الاستثناءات
✅ مثال مع finally
(يعمل دائمًا في النهاية):
try {
echo 10 / 0;
} catch (Throwable $e) {
echo "خطأ: " . $e->getMessage();
} finally {
echo "✅ انتهى التنفيذ";
}
PHP🟦 سادسًا: إنشاء Exception مخصص
class CustomException extends Exception {}
try {
throw new CustomException("هذا خطأ خاص");
} catch (CustomException $e) {
echo $e->getMessage();
}
PHP🟦 سابعًا: تخزين الأخطاء في ملف
ini_set("log_errors", 1);
ini_set("error_log", "errors.log");
error_log("حدث خطأ في الاتصال بقاعدة البيانات");
PHP🟦 ثامنًا: التعامل مع Shutdown Function
function shutdownHandler() {
$error = error_get_last();
if ($error) {
echo "حدث خطأ قاتل: " . $error['message'];
}
}
register_shutdown_function("shutdownHandler");
PHP🟦 تاسعًا: set_exception_handler()
لتسجيل جميع الاستثناءات غير المُلتقطة:
set_exception_handler(function($e) {
echo "استثناء غير مُلتقط: " . $e->getMessage();
});
PHP🟦 نصائح ومحاذير:
✅ فوائد المعالجة الجيدة للأخطاء:
- منع توقف النظام.
- تحسين تجربة المستخدم.
- تسهيل تتبع الأعطال (debugging).
- حماية التطبيق من كشف تفاصيل حساسة.
⚠️ محاذير:
- لا تُظهر الأخطاء للمستخدم النهائي.
- لا تستخدم
die()
وexit()
كثيرًا داخل الإنتاج. - الاستثناءات الغير مُعالجة قد تُظهر ثغرات.