مقدمة: لماذا يصمت PHP عندما يحدث خطأ؟
\n\nهل سبق لك أن كتبت سكربت PHP، وشغلته في المتصفح — ورأيت... صفحة بيضاء فارغة؟ لا رسائل، لا تلميحات. فقط صمت وشعور بأنك فعلت شيئاً خاطئاً. هل يبدو ذلك مألوفاً؟
\n\nهذه واحدة من أكثر المشاكل شيوعاً التي يواجهها المبتدئون في PHP. سؤال «How can I get useful error messages in PHP?» على Stack Overflow حصد آلاف المشاهدات. ولا عجب: بدون رسائل أخطاء واضحة، يتحول تصحيح الأخطاء إلى تخمين عشوائي.
\n\nفي هذا المقال، سنشرح كيفية «جعل PHP يتحدث» ليخبرك بصراحة ما الخطأ الذي حدث. ستتعرف على الإعدادات المسؤولة عن عرض الأخطاء، وكيفية تفعيلها في مراحل التطوير المختلفة، وماذا تفعل إذا استمرت الأخطاء في الاختفاء. هيا بنا!
\n\nلماذا يخفي PHP الأخطاء افتراضياً؟
\n\nقبل أن نبدأ في تعديل الإعدادات، دعنا نفهم السبب. PHP هي لغة تعمل على الخادم. على الخوادم الإنتاجية (production)، عرض الأخطاء للمستخدمين ممارسة سيئة. تخيل: بدلاً من صفحة متجر إلكتروني جميلة، يرى العميل شيئاً مثل Fatal error: Call to undefined function. هذا ليس فقط غير جميل، بل غير آمن أيضاً — فقد يتمكن المخترق من معرفة هيكل الكود الخاص بك.
لذلك، جعل مطورو PHP عرض الأخطاء في المتصفح معطلاً افتراضياً. لكن على الخادم المحلي (مثل OpenServer, XAMPP, MAMP) أو في مرحلة التطوير، هذا يعيق العمل بشكل كبير. دعنا نصلح ذلك.
\n\nالطريقة 1: تفعيل الأخطاء عبر php.ini (شامل)
\n\nالطريقة الأكثر موثوقية هي تعديل ملف الإعدادات php.ini. ابحث عنه في مجلد PHP الخاص بك (أو في لوحة تحكم الخادم المحلي). افتح الملف وابحث عن (أو أضف) الأسطر التالية:
display_errors = On\nerror_reporting = E_ALL\n\n\nماذا يعني هذا؟
\n- \n
display_errors = On— يسمح بعرض الأخطاء مباشرة على الشاشة (في المتصفح أو الطرفية). \n error_reporting = E_ALL— يطلب من PHP عرض جميع أنواع الأخطاء: من التحذيرات (warnings) إلى الأخطاء الفادحة. \n
بعد التعديل، أعد تشغيل خادم الويب (Apache, Nginx). الآن أي سكربت سيعرض الأخطاء.
\n\nهام: على الخادم الإنتاجي، لا تترك أبداً display_errors = On. استخدم Off وقم بإعداد تسجيل الأخطاء (كما سنشرح لاحقاً).
الطريقة 2: تفعيل الأخطاء داخل السكربت (طريقة سريعة)
\n\nإذا لم يكن لديك صلاحية الوصول إلى php.ini (مثلاً في الاستضافة المشتركة)، أو كنت تريد تفعيل الأخطاء لملف واحد فقط، استخدم الدالتين ini_set() و error_reporting(). أضف هذه الأسطر في بداية سكربت PHP الخاص بك:
<?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\n// الكود الخاص بك بعد ذلك\n$foo = 1/0; // سيؤدي إلى تحذير: القسمة على صفر\n?>\n\n\nشرح الأسطر:
\n- \n
ini_set('display_errors', 1)— يفعل عرض الأخطاء على الشاشة. \n ini_set('display_startup_errors', 1)— يفعل عرض الأخطاء التي تحدث عند بدء تشغيل PHP (مثل فشل تحميل السكربت نفسه). \n error_reporting(E_ALL)— يعرض جميع مستويات الأخطاء. \n
هذه الطريقة تعمل فوراً ولا تتطلب إعادة تشغيل الخادم. مثالية لتصحيح الأخطاء السريع.
\n\nالطريقة 3: استخدام .htaccess (لخادم Apache)
\n\nإذا كان خادمك يعمل بنظام Apache، يمكنك تفعيل الأخطاء عبر ملف .htaccess في المجلد الجذر للموقع. أضف إليه:
php_flag display_errors on\nphp_value error_reporting E_ALL\n\n\nبعد حفظ الملف، ستبدأ الأخطاء في الظهور لجميع السكربتات في هذا المجلد والمجلدات الفرعية. مريح عندما تحتاج إلى تفعيل التصحيح بسرعة.