في هذا الدرس 6تصفّح المواضيع
أثناء تشغيل الملف البرمجي، يصنف محرك PHP المشكلات والأعطال حسب درجة خطورتها إلى مستويات واضحة:
- إشعارات التقادم (Deprecations & Notices): تنبيهات غير قاتلة تخبر المبرمج بأن ميزة معينة أصبحت قديمة ويُنصح بتحديثها.
- التحذيرات (
E_WARNING): أخطاء غير قاتلة (مثل قراءة مفتاح غير موجود في مصفوفة)؛ حيث يسجل محرك PHP التحذير ويكمل تنفيذ باقي أسطر الملف. - الأخطاء القاتلة (Fatal Errors): أعطال حرجة (مثل استدعاء دالة غير موجودة) تؤدي إلى إيقاف تنفيذ السكربت في الحال.
<?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
// 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
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
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
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_reporting | E_ALL | E_ALL | رصد جميع مستويات الأخطاء والتنبيهات |
display_errors | 1 (مفعّل) | 0 (معطّل وجوباً) | الإظهار للمبرمج محلياً وإخفاؤه عن الزوار بالإنتاج |
display_startup_errors | 1 (مفعّل) | 0 (معطّل) | التحكم في عرض أخطاء بدء تشغيل المحرك |
log_errors | 1 (مفعّل) | 1 (مفعّل وجوباً) | حفظ تفاصيل الأخطاء بأمان في ملف سجل الخادم |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلمت في هذا الدرس تصنيفات أعطال التشغيل في PHP، وثوابت مستويات الأخطاء وعلى رأسها E_ALL، وكيفية ضبط display_errors وlog_errors بأمان بين بيئة التطوير وبيئة الإنتاج، واستخدام error_log() وtrigger_error(). الخطوة التالية: انتقل إلى الدرس الثاني والخمسين «معالجة الاستثناءات عبر try و catch والاستثناءات المخصصة في PHP» لبناء معالجة كائنية متكاملة للأخطاء.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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 ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم تشخيص أعطال التشغيل في PHP للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم ثوابت مستويات الأخطاء في PHP وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا يحدث عندما يواجه محرك PHP تحذيراً من مستوى E_WARNING أثناء التنفيذ؟
يمثل E_WARNING تحذيراً غير قاتل؛ حيث يسجله محرك PHP ويواصل تنفيذ باقي أسطر الملف.
ما الثابت القياسي الذي يفعّل رصد جميع مستويات الأخطاء والتحذيرات والتنبيهات في PHP 8.4؟
يشمل الثابت E_ALL كافة مستويات الأخطاء والتحذيرات والإشعارات في لغة PHP الحديثة.
في خادم الإنتاج الحي العام، يجب دائماً ضبط display_errors على "0" (إيقاف) حتى لا تتسرب مسارات الملفات الداخلية للزوار.
صواب؛ يجب إخفاء رسائل الخطأ التقنية عن الزوار في بيئة الإنتاج مع تسجيلها داخلياً في ملف السجل.
أي إعداد عبر الدالة ini_set() يضمن قيام PHP بكتابة أخطاء التشغيل داخل ملف سجل الخادم؟
يفعّل الإعداد ini_set("log_errors", "1") تسجيل الأخطاء في ملف السجل.
ما الدالة المدمجة في PHP التي تكتب رسالة تشخيصية مخصصة مباشرة في سجل أخطاء الخادم دون طباعتها في المتصفح؟
ترسل الدالة error_log() الرسالة مباشرة إلى سجل الأخطاء الخاص بالخادم.
ما الدالة المستخدمة لإطلاق إشعار تقادم مخصص للمطورين (E_USER_DEPRECATED)؟
تُستخدم الدالة trigger_error() مع الثابت E_USER_DEPRECATED لإطلاق تنبيه تقادم مخصص.
في بيئة التطوير المحلية، يساعد تفعيل كل من error_reporting(E_ALL) و display_errors على اكتشاف التحذيرات وإشعارات التقادم فوراً.
صواب؛ إظهار جميع مستويات الأخطاء محلياً يساعد المبرمج على كتابة كود نظيف وخالٍ من التحذيرات.
أي إعدادين مما يلي يشكلان الضبط الأمني القياسي الموصى به لخادم PHP في بيئة الإنتاج الحية؟
تعطيل عرض الأخطاء للزوار (display_errors = 0) وتفعيل تسجيلها الداخلي (log_errors = 1).