انتقل إلى محتوى الدرس
الدرس 76
دورة PHP

هرمية الأخطاء وإعدادات التقارير والتسجيل الآمن في PHPPHP Error Reporting and Throwable Hierarchy

تعلّم هرمية الأخطاء وإعدادات التقارير والتسجيل الآمن في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

أثناء تشغيل الملف البرمجي، يصنف محرك PHP المشكلات والأعطال حسب درجة خطورتها إلى مستويات واضحة:

  • إشعارات التقادم (Deprecations & Notices): تنبيهات غير قاتلة تخبر المبرمج بأن ميزة معينة أصبحت قديمة ويُنصح بتحديثها.
  • التحذيرات (E_WARNING): أخطاء غير قاتلة (مثل قراءة مفتاح غير موجود في مصفوفة)؛ حيث يسجل محرك PHP التحذير ويكمل تنفيذ باقي أسطر الملف.
  • الأخطاء القاتلة (Fatal Errors): أعطال حرجة (مثل استدعاء دالة غير موجودة) تؤدي إلى إيقاف تنفيذ السكربت في الحال.
مخطط يوضح ضبط تقارير الأخطاء في PHP 8.4 والمقارنة بين بيئة التطوير المحلية وبيئة الإنتاج الآمنة
PHP
<?php
$settings = ["theme" => "dark"];

// Safe check prevents E_WARNING on missing key:
$lang = $settings["lang"] ?? "ar";
echo "Active language: " . $lang;

تمثل لغة PHP مستويات الأخطاء عبر ثوابت رقمية مدمجة تعمل بنظام القناع الثنائي (Bitmask Constants):

  • الثابت الشامل E_ALL: يشمل كافة مستويات الأخطاء والتحذيرات والتنبيهات وإشعارات التقادم في PHP 8.4.
  • الثوابت E_WARNING و E_NOTICE: تمثل التحذيرات التشغيلية والإشعارات التنبيهية.
  • الثوابت E_DEPRECATED و E_USER_DEPRECATED: تمثل تنبيهات الدوال والميزات المتقادمة.
PHP
<?php
// Enable every error level in PHP 8.4:
error_reporting(E_ALL);

echo "E_ALL bitmask value: " . E_ALL . "\n";
echo "E_WARNING value: " . E_WARNING;

في بيئة التطوير المحلية على جهازك، تحتاج إلى رؤية أي خطأ أو تحذير فور وقوعه لتصحيحه بسرعة قبل رفع الكود:

  • الدالة error_reporting(E_ALL);: تأمر محرك PHP برصد جميع مستويات الأخطاء دون استثناء.
  • الدالة ini_set("display_errors", "1");: تفعّل إظهار رسائل الخطأ ورقم السطر على الشاشة أثناء التجريب المحلي.
PHP
<?php
declare(strict_types=1);

// Local Development Diagnostic Configuration:
error_reporting(E_ALL);
ini_set("display_errors", "1");
ini_set("display_startup_errors", "1");

echo "Development diagnostics active";

في خوادم الإنتاج الحية، يُعد إظهار أخطاء PHP الخام للزوار ثغرة أمنية خطيرة؛ لأن رسائل الخطأ تكشف مسارات مجلدات الخادم وأسماء الجداول وتفاصيل الكود الداخلي:

  • إخفاء العرض العام: يجب ضبط ini_set("display_errors", "0"); في بيئة الإنتاج.
  • تفعيل التسجيل الداخلي الآمن: نُبقي على error_reporting(E_ALL); مع تفعيل ini_set("log_errors", "1"); ليتم حفظ تفاصيل الأعطال سرياً في ملف السجل الخاص بالخادم.
مخطط تدفق التنفيذ العملي لقسم تسجيل الأخطاء بملفات السجل بالإنتاج في لغة PHP
PHP
<?php
declare(strict_types=1);

// Production-Safe Error Configuration:
error_reporting(E_ALL);
ini_set("display_errors", "0");
ini_set("log_errors", "1");

echo "Public response is clean and secure.";

توفر لغة PHP دالتين قياسيتين لتسجيل الأحداث التشخيصية وإطلاق التنبيهات المخصصة من داخل الكود:

  • الدالة error_log(string $message): تكتب رسالة تشخيصية مباشرة في ملف سجل أخطاء الخادم دون إظهار أي شيء في متصفح الزائر.
  • الدالة trigger_error(string $msg, int $level): تطلق تنبيهاً أو تحذيراً مخصصاً للمطورين مثل E_USER_DEPRECATED عند استدعاء دالة قديمة.
PHP
<?php
declare(strict_types=1);

function legacyExport(string $file): bool {
    error_log("[Audit] legacyExport called for: " . $file);
    trigger_error("Use CsvExporter::run() instead", E_USER_DEPRECATED);
    return true;
}
legacyExport("orders.csv");

يقارن الجدول المرجعي التالي بين إعدادات الأخطاء القياسية في بيئة التطوير المحلية وبيئة الإنتاج الحية:

الإعداد / الدالةبيئة التطوير المحليةخادم الإنتاج الحيالهدف الأمني والهندسي
error_reportingE_ALLE_ALLرصد جميع مستويات الأخطاء والتنبيهات
display_errors1 (مفعّل)0 (معطّل وجوباً)الإظهار للمبرمج محلياً وإخفاؤه عن الزوار بالإنتاج
display_startup_errors1 (مفعّل)0 (معطّل)التحكم في عرض أخطاء بدء تشغيل المحرك
log_errors1 (مفعّل)1 (مفعّل وجوباً)حفظ تفاصيل الأخطاء بأمان في ملف سجل الخادم
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تعلمت في هذا الدرس تصنيفات أعطال التشغيل في PHP، وثوابت مستويات الأخطاء وعلى رأسها E_ALL، وكيفية ضبط display_errors وlog_errors بأمان بين بيئة التطوير وبيئة الإنتاج، واستخدام error_log() وtrigger_error(). الخطوة التالية: انتقل إلى الدرس الثاني والخمسين «معالجة الاستثناءات عبر try و catch والاستثناءات المخصصة في PHP» لبناء معالجة كائنية متكاملة للأخطاء.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Error Reporting تقارير الأخطاء
تعلّم هرمية الأخطاء وإعدادات التقارير والتسجيل الآمن في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
للمراجعة
02 How PHP Reports Runtime Problems تشخيص أعطال التشغيل في PHP
المفهوم الأساسي لقسم تشخيص أعطال التشغيل في PHP في لغة PHP الحديثة.
للمراجعة
03 Error Constants E_ALL and Levels ثوابت مستويات الأخطاء في PHP
الصياغة البرمجية والتطبيق العملي المباشر لقسم ثوابت مستويات الأخطاء في PHP.
للمراجعة
04 Configuring error_reporting Display ضبط عرض الأخطاء ببيئة التطوير
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم ضبط عرض الأخطاء ببيئة التطوير.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 PHP PHP
PHP: Hypertext Preprocessor
لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
للمراجعة
02 CLI CLI
Command-Line Interface
واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
للمراجعة
03 FPM FPM
FastCGI Process Manager
مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم تشخيص أعطال التشغيل في PHP للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم ثوابت مستويات الأخطاء في PHP وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ماذا يحدث عندما يواجه محرك PHP تحذيراً من مستوى E_WARNING أثناء التنفيذ؟

يمثل E_WARNING تحذيراً غير قاتل؛ حيث يسجله محرك PHP ويواصل تنفيذ باقي أسطر الملف.

02

ما الثابت القياسي الذي يفعّل رصد جميع مستويات الأخطاء والتحذيرات والتنبيهات في PHP 8.4؟

يشمل الثابت E_ALL كافة مستويات الأخطاء والتحذيرات والإشعارات في لغة PHP الحديثة.

03

في خادم الإنتاج الحي العام، يجب دائماً ضبط display_errors على "0" (إيقاف) حتى لا تتسرب مسارات الملفات الداخلية للزوار.

صواب؛ يجب إخفاء رسائل الخطأ التقنية عن الزوار في بيئة الإنتاج مع تسجيلها داخلياً في ملف السجل.

04

أي إعداد عبر الدالة ini_set() يضمن قيام PHP بكتابة أخطاء التشغيل داخل ملف سجل الخادم؟

يفعّل الإعداد ini_set("log_errors", "1") تسجيل الأخطاء في ملف السجل.

05

ما الدالة المدمجة في PHP التي تكتب رسالة تشخيصية مخصصة مباشرة في سجل أخطاء الخادم دون طباعتها في المتصفح؟

ترسل الدالة error_log() الرسالة مباشرة إلى سجل الأخطاء الخاص بالخادم.

06

ما الدالة المستخدمة لإطلاق إشعار تقادم مخصص للمطورين (E_USER_DEPRECATED)؟

تُستخدم الدالة trigger_error() مع الثابت E_USER_DEPRECATED لإطلاق تنبيه تقادم مخصص.

07

في بيئة التطوير المحلية، يساعد تفعيل كل من error_reporting(E_ALL) و display_errors على اكتشاف التحذيرات وإشعارات التقادم فوراً.

صواب؛ إظهار جميع مستويات الأخطاء محلياً يساعد المبرمج على كتابة كود نظيف وخالٍ من التحذيرات.

08

أي إعدادين مما يلي يشكلان الضبط الأمني القياسي الموصى به لخادم PHP في بيئة الإنتاج الحية؟

تعطيل عرض الأخطاء للزوار (display_errors = 0) وتفعيل تسجيلها الداخلي (log_errors = 1).