كيف تتحقق من سجل أخطاء PHP في الاستضافة خطوة بخطوة

شروحات تقنية

إذا كان موقعك يعرض صفحة بيضاء أو خطأ 500 ولا تعرف السبب، فإن أسرع طريق للحل هو فتح سجل أخطاء PHP (PHP error log). في معظم الاستضافات المشتركة تجده داخل لوحة التحكم تحت اسم «Errors» أو «Error Log»، أو في ملف باسم error_log بجانب ملفات موقعك، أو عبر أمر واحد في SSH. المشكلة الحقيقية عادةً ليست «أين السجل» بل أنّ تسجيل الأخطاء غير مفعّل من الأساس، لذا سنغطي الأمرين معاً.

قبل أن نبدأ، انتبه إلى نقطة يخلط فيها كثيرون: «إظهار الأخطاء على الشاشة» (display_errors) شيء، و«كتابتها في ملف سجل» (log_errors) شيء آخر. على موقع مباشر يجب أن يكون الأول مُطفأً حتى لا يرى الزوار تفاصيل حساسة، والثاني مُفعّلاً حتى تراجعها أنت بهدوء لاحقاً.

الطريقة الأولى: من لوحة التحكم (cPanel أو ما شابه)

هذه أسهل طريقة على الاستضافة المشتركة ولا تحتاج أي أوامر:

  1. سجّل الدخول إلى لوحة التحكم (cPanel أو Plesk أو لوحة المستضيف الخاصة).
  2. في cPanel ابحث عن قسم Metrics ثم اضغط Errors؛ سيعرض لك آخر أسطر أخطاء الخادم مباشرة.
  3. لسجل أدق خاص بموقعك، افتح File Manager وابحث عن ملف اسمه error_log في المجلد الجذر (public_html) أو داخل مجلد التطبيق.
  4. اضغط على الملف ثم View لقراءة محتواه، أو Download لتنزيله ومراجعته على جهازك.

نصيحة من واقع التجربة: ملف error_log قد ينتفخ إلى عشرات الميغابايت مع الوقت. لا تفتحه كاملاً في المتصفح؛ نزّله أو اقرأ آخره فقط، فالأخطاء الأحدث دائماً في النهاية.

الطريقة الثانية: عبر SSH (الأدق للمحترفين)

إن كان لديك وصول SSH (شائع في الـ VPS والخوادم المخصصة)، فالأوامر أسرع وأوضح:

tail -n 50 error_log
tail -f /var/log/php_errors.log
  • tail -n 50 يعرض آخر 50 سطراً، وهي عادةً ما تحتاجه.
  • tail -f يبقي النافذة مفتوحة ويعرض كل خطأ لحظة حدوثه، وهو مثالي عندما تكرّر خطأً معيناً وتريد التقاطه فوراً.

إن لم تكن تعرف مسار السجل، اسأل PHP نفسها:

php -i | grep error_log

الطريقة الثالثة: ضبط المسار من ملف php.ini

إذا لم تجد سجلاً أصلاً، فغالباً التسجيل غير مفعّل. عدّل ملف php.ini (أو أنشئ ملف .user.ini في مجلد موقعك على الاستضافة المشتركة) وأضف:

log_errors = On
error_log = /home/user/public_html/php-errors.log
error_reporting = E_ALL
display_errors = Off

استبدل المسار بمسار حقيقي قابل للكتابة داخل حسابك. بعد الحفظ قد تحتاج إلى انتظار دقيقة أو إعادة تحميل الصفحة حتى تُطبَّق التغييرات على بعض الاستضافات.

هل تستخدم ووردبريس؟ فعّل WP_DEBUG بدل php.ini

كثير من الباحثين عن هذا الموضوع يديرون مواقع ووردبريس. في هذه الحالة الأنسب تفعيل سجل خاص عبر ملف wp-config.php، فوق سطر «توقّف عن التعديل»:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

سيُكتب كل شيء في ملف wp-content/debug.log، وهو غالباً أدق من سجل الخادم العام لأنه يلتقط أخطاء القوالب والإضافات تحديداً.

كيف تختار الطريقة المناسبة؟

حالتكأفضل طريقةلماذا
استضافة مشتركة بلوحة تحكمError Log في cPanel أو ملف error_logلا تحتاج أوامر ولا صلاحيات خاصة
VPS أو خادم مخصصSSH مع tailأسرع ومتابعة لحظية للأخطاء
موقع ووردبريسWP_DEBUG_LOGيعزل أخطاء الإضافات والقوالب

كيف تقرأ رسالة الخطأ؟

كل سطر يخبرك بثلاثة أشياء: نوع الخطأ، والملف ورقم السطر. تعرّف على الأنواع لتحدد الأولوية:

  • Parse/Syntax error: خطأ إملائي في الكود يوقف الموقع كلياً؛ عالجه أولاً.
  • Fatal error: دالة أو ملف مفقود يمنع التنفيذ؛ غالباً بعد تحديث إضافة.
  • Warning: مشكلة لا توقف الموقع لكنها قد تكسر ميزة.
  • Notice / Deprecated: تنبيهات لممارسات قديمة، مهمة خصوصاً مع الانتقال إلى إصدارات PHP 8.x الأحدث.

خطأ شائع يقع فيه المبتدئون: إصلاح أول سطر يرونه. الأصح أن تبدأ من أقدم خطأ Fatal في السلسلة، فهو عادةً السبب الجذري الذي فجّر بقية التحذيرات.

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

لماذا لا أجد ملف error_log رغم وجود مشكلة؟ غالباً لأن log_errors مُطفأة، أو أن المسار المحدد في error_log غير قابل للكتابة. فعّل التسجيل واضبط مساراً داخل حسابك كما في الأعلى.

هل يمكن رؤية الأخطاء مباشرة على الشاشة؟ نعم عبر display_errors = On، لكن افعل ذلك في بيئة التطوير فقط. إظهارها على موقع مباشر يكشف مسارات ملفاتك للمهاجمين.

أين يوجد السجل افتراضياً على لينكس؟ يختلف بحسب الإعداد، لكنه شائع في /var/log/php_errors.log أو /var/log/apache2/error.log. تحقق دائماً بأمر php -i | grep error_log.

السجل ضخم جداً، ماذا أفعل؟ لا تحذفه أثناء تشغيل الموقع؛ أفرغ محتواه بأمان أو نزّله ثم امسحه من لوحة الملفات، وفعّل تدوير السجلات (log rotation) إن كان لديك وصول للخادم.