0Pricing
PHP Academy · درس

أنواع أخطاء PHP وإعدادات الإبلاغ عنها

افهموا الإشعارات والتحذيرات والأخطاء القاتلة، بالإضافة إلى مستويات error_reporting

أنواع أخطاء PHP وإعدادات الإبلاغ عنها درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

أنواع أخطاء PHP

يحتوي PHP على عدة مستويات لشدة الأخطاء:

  • Notice — مشكلة بسيطة، ويستمر التنفيذ
  • Warning — مشكلة غير قاتلة، ويستمر التنفيذ
  • Fatal Error — يتوقف التنفيذ فورًا
  • Parse Error — خطأ في بناء الجملة، ويحدث التوقف قبل التنفيذ
  • Deprecated — ستُزال الميزة

error_reporting()

تحكموا في الأخطاء التي يبلغ عنها PHP باستخدام error_reporting():

<?php
// Show all errors (development)
error_reporting(E_ALL);

// Hide notices and deprecated
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

// Production: no display, log to file
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

display_errors مقابل log_errors

إعدادات php.ini الأساسية لمعالجة الأخطاء:

  • display_errors = On — عرض الأخطاء في المتصفح (في بيئة التطوير فقط)
  • display_errors = Off — إخفاء الأخطاء عن المستخدمين (في بيئة الإنتاج)
  • log_errors = On — كتابة الأخطاء في ملف error_log
  • error_log = /path/to/file — تحديد موقع السجل

يُمنع عرض الأخطاء للمستخدمين في بيئة الإنتاج!

إطلاق الأخطاء باستخدام trigger_error

أنشئ أخطاء PHP الخاصة بك باستخدام trigger_error():

<?php
function divide(int $a, int $b): float {
    if ($b === 0) {
        trigger_error('Division by zero', E_USER_WARNING);
        return 0.0;
    }
    return $a / $b;
}

echo divide(10, 0);  // triggers E_USER_WARNING

معالج أخطاء مخصص

سجّل معالج الأخطاء الخاص بك باستخدام set_error_handler():

<?php
set_error_handler(function(int $errno, string $errstr, string $file, int $line): bool {
    $message = "[$errno] $errstr in $file:$line";
    error_log($message);
    if ($errno === E_USER_ERROR) {
        http_response_code(500);
        die('Internal error — please try again later');
    }
    return true;  // don't execute PHP internal error handler
});

trigger_error('Custom error message', E_USER_ERROR);

المصادر الشائعة للأخطاء

الأسباب المعتادة لأخطاء PHP:

  • الوصول إلى مفتاح غير معرّف في مصفوفة ← إشعار
  • استدعاء دالة تُرجع false ثم استخدام النتيجة ← تحذير
  • استدعاء دالة غير معرّفة ← خطأ فادح
  • فقدان الفاصلة المنقوطة ← خطأ في التحليل
  • القسمة على صفر ← تحذير (تُرجع INF أو NAN)

عامل كبت الأخطاء @

يعمل العامل @ على كبت الأخطاء الناتجة عن تعبير واحد — تجنّب استخدامه، واستخدم معالجة الأخطاء المناسبة:

<?php
// Bad: hides errors silently
$result = @file_get_contents('missing.txt');

// Good: check explicitly
$result = file_get_contents('missing.txt');
if ($result === false) {
    // handle the error
    echo 'File not found';
}

تغييرات JIT والأخطاء في PHP 8

جعلت PHP 8 معالجة بعض الأخطاء أكثر صرامة:

  • تحويل العديد من التحذيرات إلى TypeError/ValueError
  • استخدام str_contains/starts_with/ends_with بدلاً من regex للتحققات البسيطة
  • يؤدي تمرير أنواع وسيطات غير صحيحة إلى طرح TypeError افتراضيًا

ini_set في وقت التشغيل

تجاوز إعدادات php.ini في وقت التشغيل:

<?php
// Display errors during development
if (getenv('APP_ENV') === 'development') {
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
} else {
    ini_set('display_errors', '0');
    ini_set('log_errors', '1');
    error_reporting(E_ALL);
}

التحقق من مستوى الخطأ

اكتشف مستويات الأخطاء باستخدام AND على مستوى البتات:

<?php
$level = error_reporting();

if ($level & E_NOTICE) {
    echo 'Notices are reported';
}
if ($level & E_WARNING) {
    echo 'Warnings are reported';
}

// Check specific error types
echo (E_ALL & E_NOTICE) ? 'E_ALL includes E_NOTICE' : 'no';

أفضل ممارسات تسجيل الأخطاء

عادات جيدة لتسجيل الأخطاء:

  • سجّل الأخطاء دائمًا في بيئة الإنتاج
  • ضمّن السياق: معرّف المستخدم، وعنوان URL للطلب، والطابع الزمني
  • استخدم التسجيل المنظم (JSON) لتسهيل التحليل
  • دوّر ملفات السجل لمنع امتلاء القرص
  • راقب السجلات باستخدام أدوات مثل ELK أو Datadog أو Papertrail

تحقق سريع

ما نوع خطأ PHP الذي يوقف التنفيذ فورًا؟

مراجعة: الإبلاغ عن أخطاء PHP

أساسيات معالجة الأخطاء:

  • أنواع الأخطاء: إشعار، وتحذير، وخطأ فادح، وخطأ في التحليل، وخطأ متقادم
  • حدّد المستوى باستخدام error_reporting()
  • أوقف العرض وفعّل التسجيل في بيئة الإنتاج
  • سجّل معالجًا مخصصًا باستخدام set_error_handler()
  • لا تكبت الأخطاء باستخدام @ في كود الإنتاج

الأسئلة الشائعة

هل درس «أنواع أخطاء PHP وإعدادات الإبلاغ عنها» مجاني؟

نعم — نص درس «أنواع أخطاء PHP وإعدادات الإبلاغ عنها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «أنواع أخطاء PHP وإعدادات الإبلاغ عنها»؟

افهموا الإشعارات والتحذيرات والأخطاء القاتلة، بالإضافة إلى مستويات error_reporting تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أنواع أخطاء PHP وإعدادات الإبلاغ عنها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أنواع أخطاء PHP وإعدادات الإبلاغ عنها
  2. Try وCatch وFinally
  3. إنشاء استثناءات مخصّصة
  4. تسجيل الأخطاء وأفضل الممارسات
← العودة إلى PHP Academy