كشف أخطاء PHP: إظهار الأخطاء وتحسين أداء موقعك

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يخاف المطورون من الشاشة البيضاء؟

\n\n

كل مطور PHP واجه مرة على الأقل هذا الموقف: الكتب مكتوب بشكل صحيح، لكن بدلاً من النتيجة تظهر صفحة فارغة. لا أخطاء، لا تحذيرات. فقط صمت وعرق بارد. هل يبدو ذلك مألوفًا؟

\n\n

على Stack Overflow، سؤال «How do I get PHP errors to display?» حصل على آلاف المشاهدات ومئات الإجابات. هذا ليس صدفة: القدرة على تفعيل ومعالجة الأخطاء بشكل صحيح هي مهارة أساسية توفر ساعات من التصحيح. لكن هناك فارق بسيط: الإعدادات الخاطئة قد لا تساعد فقط، بل قد تقلل من أداء موقعك أو، الأسوأ من ذلك، تفتح ثغرات أمنية.

\n\n

في هذه المقالة، سنستعرض جميع طرق تفعيل عرض أخطاء PHP — من الحلول السريعة للتطوير المحلي إلى الإعدادات الآمنة لخادم الإنتاج. وبالطبع، سنتحدث عن تحسين الأداء: كيف لا تملأ السجلات ولا تبطئ موقعك.

\n\n

نبذة سريعة: ما هي أنواع أخطاء PHP؟

\n\n

قبل تفعيل العرض، من المفيد فهم ما نتعامل معه. PHP يولد عدة مستويات من الأخطاء:

\n\n
    \n
  • E_ERROR — خطأ فادح. يتوقف السكريبت. مثال: نفاد الذاكرة، استدعاء كلاس غير موجود.
  • \n
  • E_WARNING — غير فادح. يستمر السكريبت لكن هناك خطأ. مثال: تضمين ملف غير موجود.
  • \n
  • E_NOTICE — إشعار. عادةً عن مشاكل بسيطة (متغير غير معرف).
  • \n
  • E_PARSE — خطأ نحوي. يحدث قبل تنفيذ الكود، يصعب التقاطه في وقت التشغيل.
  • \n
  • E_ALL — يشمل جميع المستويات باستثناء E_STRICT (قبل PHP 8.0).
  • \n
\n\n

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

\n\n

الطريقة الأولى: سريعة ومباشرة — داخل الكود

\n\n

أسهل طريقة للتصحيح لمرة واحدة هي إضافة سطرين سحريين في بداية السكريبت:

\n\n
<?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n?>
\n\n

ماذا يحدث هنا؟

\n
    \n
  • display_errors — يفعل عرض الأخطاء على الشاشة.
  • \n
  • display_startup_errors — يعرض الأخطاء التي حدثت عند بدء تشغيل PHP (مثل أخطاء php.ini).
  • \n
  • error_reporting(E_ALL) — يضبط مستوى الإبلاغ: عرض كل شيء.
  • \n
\n\n

هذه الطريقة مثالية لملف واحد تقوم بتصحيحه. لكن هناك عيوب: يجب أن تتذكر حذف هذه الأسطر قبل النشر على الإنتاج. وإلا فإنك تخاطر بعرض «أحشاء» تطبيقك للمستخدمين.

\n\n

الطريقة الثانية: إعداد php.ini — بشكل شامل ودائم

\n\n

إذا كنت تعمل على جهاز محلي أو تتحكم في الخادم، فمن الأسهل تعديل php.ini. ابحث عن هذا الملف (عادةً في /etc/php/ أو /usr/local/etc/php/) وقم بتغيير التوجيهات التالية:

\n\n
display_errors = On\ndisplay_startup_errors = On\nerror_reporting = E_ALL
\n\n

بعد التغييرات، لا تنس إعادة تشغيل خادم الويب:

\n
sudo systemctl restart apache2\n# أو\nsudo systemctl restart nginx php8.1-fpm
\n\n

هام: على خادم الإنتاج، يجب أن يكون display_errors Off. بدلاً من ذلك، قم بإعداد تسجيل الأخطاء في ملف:

\n\n
display_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log\nerror_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
\n\n

هذا يقلل الحمل على الإخراج ويحمي بيانات الموقع.

\n\n

الطريقة الثالثة: عبر .htaccess — للاستضافة المشتركة

\n\n

إذا لم يكن لديك وصول إلى php.ini (مثل الاستضافة الرخيصة)، استخدم ملف .htaccess في جذر الموقع:

\n\n
php_flag display_errors on\nphp_flag display_startup_errors on\nphp_value error_reporting 32767

المدونات

توصيات الكتب