«شاشة الموت البيضاء» في PHP: كيف تجعل الأخطاء تتحدث؟
كل مطور PHP واجه موقفًا: الكود يبدو أنه يعمل، لكن على الشاشة — فراغ. لا رسالة، ولا تحذير. فقط صفحة بيضاء وشعور بالجنون الخفيف. هل هذا مألوف؟ هذه هي «شاشة الموت البيضاء» الكلاسيكية (White Screen of Death — WSOD). غالبًا ما تكون المشكلة أن عرض أخطاء PHP معطل.
على Stack Overflow، جمع سؤال «How do I get PHP errors to display?» آلاف المشاهدات. وهذا ليس من قبيل الصدفة: إعداد عرض الأخطاء هو الأساس الذي يجب أن يعرفه الجميع. لكن مجرد تفعيل display_errors لا يكفي. يجب فهم كيف يؤثر ذلك على الأداء والأمان لتطبيقك.
في هذه المقالة سنشرح:
- كيفية تفعيل أخطاء PHP في بيئات مختلفة (محليًا، على الخادم، في الأطر البرمجية)؛
- كيفية ضبط
error_reportingللتصحيح الأمثل؛ - لماذا عرض الأخطاء في بيئة الإنتاج فكرة سيئة؛
- كيفية تسجيل الأخطاء دون فقدان الأداء.
هيا بنا!
لماذا لا يعرض PHP الأخطاء؟ ثلاثة أسباب رئيسية
قبل الخوض في الكود، دعنا نفهم لماذا قد تكون الأخطاء مخفية. PHP لغة مرنة، وسلوكها يعتمد على إعدادات php.ini، والكود نفسه، وبيئة الخادم.
1. إعدادات php.ini
المسبب الرئيسي هو التوجيه display_errors. افتراضيًا، في العديد من خدمات الاستضافة، يكون مضبوطًا على Off. هذا لأسباب أمنية: في بيئة الإنتاج، عرض تتبع الاستدعاءات للمستخدم ممارسة سيئة.
2. دالة error_reporting()
حتى إذا كان display_errors مفعّلاً، قد يكون مستوى الأخطاء منخفضًا جدًا. على سبيل المثال، error_reporting(0) سيخفي كل شيء. أو قد تقوم بتصفية أنواع الأخطاء المطلوبة (E_NOTICE, E_WARNING) عن طريق الخطأ.
3. أخطاء قبل تنفيذ الكود
الأكثر دهاءً هي الأخطاء النحوية في php.ini أو في الملفات المضمنة. إذا لم يتمكن PHP حتى من تشغيل الكود، فلن يصل إلى إعداداتك. في هذه الحالات، يساعد التحقق من النحو عبر الطرفية: php -l file.php.
كيفية تفعيل عرض أخطاء PHP: دليل خطوة بخطوة
الطريقة 1. تحرير php.ini (إعدادات دائمة)
الطريقة الأكثر موثوقية هي تغيير php.ini. ابحث عن الملف (عادة ما يكون في /etc/php/ أو /usr/local/etc/php/) واضبط:
display_errors = Onerror_reporting = E_ALLبعد التغييرات، أعد تشغيل الخادم بالتأكيد:
sudo service apache2 restart# أو لـ nginx + php-fpm:sudo service php8.1-fpm restartالإيجابيات: الإعداد يسري على جميع الكودات على الخادم.
السلبيات: يتطلب الوصول إلى الخادم؛ غير مناسب للاستضافة المشتركة.
الطريقة 2. عبر .htaccess (لـ Apache)
إذا لم يكن لديك وصول إلى php.ini، ولكن لديك Apache، استخدم .htaccess:
php_flag display_errors onphp_value error_reporting 32767 # E_ALLمهم: هذه الطريقة تعمل إذا كان التوجيه AllowOverride مسموحًا به على الخادم.
الطريقة 3. مباشرة في الكود (للتصحيح)
الخيار الأكثر مرونة هو تفعيل الأخطاء في ملف معين. مثالي للتطوير:
<?phpini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);
// كودكecho $undefined_variable; // سيؤدي إلى Notice?>لاحظ display_startup_errors — فهو يلتقط الأخطاء التي تحدث قبل تنفيذ الكود (مثل عند تضمين الملفات).
الطريقة 4. خصوصية الأطر البرمجية (Laravel, Symfony, WordPress)
الأطر البرمجية الحديثة لها آلياتها الخاصة. في Laravel
المدونات
توصيات الكتب
اقرأ أيضًا