مقدمة: لماذا يُعد التصحيح قوة خارقة للمطور
\n\nهل سبق لك أن جلست ليلاً محدقاً في الشاشة، غير قادر على فهم لماذا يعرض موقع PHP الخاص بك صفحة بيضاء فارغة؟ أو الأسوأ من ذلك، أرقاماً خاطئة في تقرير؟ تهانينا، لقد واجهت عملية التصحيح. يخاف العديد من المبتدئين من هذه الكلمة، معتقدين أن تصحيح أخطاء كود PHP هو حكر على نخبة الخبراء. في الحقيقة، إنها مجرد مهارة يمكن ويجب تدريبها.
\n\nفي هذه المقالة، لن نقوم فقط بسرد الدوال. سنقوم بتحليل سيناريوهات حقيقية: من var_dump() البسيط إلى إعداد Xdebug في بيئة التطوير المتكاملة (IDE). ستتعلم كيفية تحويل عملية البحث عن الأخطاء إلى روتين منظم، وليس إلى تكهنات عشوائية. هيا بنا!
1. الكلاسيكيات: var_dump و print_r
\n\nأسهل طريقة لـ تصحيح أخطاء PHP هي إدراج var_dump($variable) في مكان مشبوه. لكن هناك فارق بسيط: ليس الجميع يفعل ذلك بشكل صحيح.
الطريقة الصحيحة لاستخدام var_dump
\nيكتب الكثيرون بهذا الشكل:
\nvar_dump($user);\nويحصلون على مخرجات غير منظمة على الشاشة. من الأفضل تنسيق المخرجات:
\necho '<pre>';\nvar_dump($user);\necho '</pre>';\ndie(); // إيقاف التنفيذ لمنع تداخل المخرجات الأخرى\n\nوبالنسبة للمصفوفات والكائنات، يُفضل استخدام print_r() مع العلم true لحفظ النتيجة في سلسلة نصية:
$data = print_r($users, true);\nfile_put_contents('debug.log', $data, FILE_APPEND);\n\nنصيحة: لا تترك أبداً var_dump في بيئة الإنتاج. استخدم التصحيح الشرطي:
if (defined('DEBUG_MODE') && DEBUG_MODE) {\n var_dump($variable);\n}\n\n2. التسجيل (Logging): أفضل صديق لك في بيئة الإنتاج
\n\nعندما يكون الموقع على الخادم، لا يمكنك ببساطة عرض الخطأ على الشاشة. هنا يأتي دور تسجيل PHP. الدالة المدمجة error_log() هي الأساس.
كيفية إعداد error_log
\nفي ملف php.ini، حدد:
error_reporting = E_ALL\ndisplay_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log\n\nالآن، سيتم كتابة جميع الأخطاء، بما في ذلك التحذيرات، في ملف. وفي الكود يمكنك القيام بذلك:
\nif ($result === false) {\n error_log("خطأ في استعلام قاعدة البيانات: " . $db->error, 3, '/var/log/myapp.log');\n // 3 تعني الكتابة في ملف، وليس في syslog\n}\n\nالنهج الحديث: Monolog
\nللمشاريع الجادة، استخدم مكتبة Monolog. يمكنها الكتابة في ملفات، وفي Slack، وفي قاعدة البيانات، وحتى في Telegram. مثال على التوصيل:
\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n$log = new Logger('my_app');\n$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));\n$log->warning('حاول مستخدم الدخول بدون صلاحيات', ['user_id' => 123]);\n\n3. Xdebug: محرك التصحيح التفاعلي
\n\nإذا لم تقم بتثبيت Xdebug حتى الآن، فأنت تهدر وقتك. هذه ليست مجرد أداة - إنها حقيبة نفاثة للمطور. تتيح لك تعيين نقاط التوقف (breakpoints)، ومشاهدة قيم المتغيرات في الوقت الفعلي، وحتى تحليل أداء الكود.
\n\nالتثبيت والإعداد
\nقم بالتثبيت عبر مدير الحزم:
\npecl install xdebug\n# أو لأوبونتو:\nsudo apt install php-xdebug\n\nأضف إلى php.ini:
zend_extension=xdebug.so\nxdebug.mode=debug\nxdebug.start_with_request=yes\nxdebug.client_host=127.0.0.1\nxdebug.client_port=9003\n\nالآن قم بإعداد بيئة التطوير المتكاملة (IDE) الخاصة بك. في PhpStorm، يتم ذلك بنقرتين: قم بإعداد مفسر PHP واضغط على "Start Listening for PHP Debug Connections".
\n\nكيف يعمل هذا عملياً
\nضع نقطة توقف (دائرة حمراء) في السطر الذي يحتوي على الكود المشبوه. قم بتشغيل السكريبت في المتصفح مع المعامل ?XDEBUG_SESSION_START=1.