6.2 · إصلاح سريع

المستوى 6 · في الممارسة

6.2إصلاح سريع

الهدف: تحويل الإتقان التقني لـ PHP إلى منعكسات إنتاج موثوقة وآمنة وقابلة للصيانة.
الوقت المقدّر: 14 دقيقة · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • المنعكس : عرض = أسباب محتملة = إجراء مستهدف — نشخص قبل لمس الشيفرة.
  • القراءة : رسالة الخطأ تعطي الملف والسطر : الغلطة غالباً في السطر السابق.
  • الإنتاج : كل فرق بين المحلي والخط يُعالج بالنسخ، وحالة الأحرف، وDocker ومتغيرات البيئة.

خيط رياد — الدليل الملصق بجانب الشاشة

رياد يحتفظ بهذا الدليل بجانب شاشته. الحكم بعد سنة : ثلاثة أسطر خدمته أكثر — الفاصلة المنقوطة الناقصة في السطر السابق، والاستعلام المدمج الذي فتح حقناً، والسر الذي كاد يذهب في Git. لكل منها، انتهى بتطبيق التسلسل (قراءة الخطأ، والتحقق من السبب، والتصحيح) بدل التعديل عشوائياً.

عرض ملاحظ، وأسباب متحقق منها، وإجراءات بالترتيب : المنعكس يتم في ثلاثة أوقات.

التشخيص قبل إعادة التشغيل

مشكلة PHP نادراً ما تُحل عشوائياً : لكل عرض أسباب نمطية وإجراء مستهدف. الجدول أدناه يجمع الحالات الأكثر شيوعاً، من الصياغة إلى النشر.

العَرَضالأسباب المحتملةالإجراءات
« syntax error, unexpected... » في سطر يبدو صحيحاًفاصلة منقوطة أو قوس/عارضة ناقصة في السطر السابقالتحقق من السطر السابق ؛ تفعيل عرض الأخطاء في التطوير ؛ المسافة البادئة (0.3, 1.x)
متغيري لا يظهر (نص حرفي $nom)علامات مفردة (حرفي) بدل المزدوجة ؛ أو حالة أحرف المتغير ($nom ≠ $Nom)علامات مزدوجة أو دمج ؛ التحقق من حالة أحرف المتغير بدقة (1.1)
$_POST فارغ أو شرط يتجاهل « 0 »طريقة خاطئة (GET مقابل POST) ؛ قيمة « falsy » ‏(0, '', '0') مختبرة بشكل سيئالتحقق من method النموذج ؛ الاختبار صراحة (isset, !== '', === 0) بدل if ($x) ‏(1.2, 2.1)
ثغرة : حقن SQL ممكنبيانات مدمجة في استعلام SQLدائماً استعلامات محضرة (prepared statement) ‏(PDO : علامات + execute) ؛ أبداً دمج (3.1)
ثغرة : XSS ‏(سكربت محقون يُنفذ)بيانات معروضة دون هروبالهروب عند العرض بـ htmlspecialchars() ؛ محركات القوالب تهرب افتراضياً (3.4)
سر تسرب (كلمة مرور قاعدة، ومفتاح)سر مكتوب مكشوفاً أو منسخ في Gitإعادة التوليد فوراً ؛ النقل إلى متغير بيئة (.env خارج المستودع) ؛ أبداً نسخ .env ‏(3.1, 5.4)
Class not found / تحميل تلقائي مكسورنطاق (namespace) غير متسق مع التحميل التلقائي PSR-4 ؛ محمل تلقائي غير متجدد ؛ vendor/ غائبالتحقق من namespace مقابل المسار (PSR-4) ؛ composer dump-autoload ؛ composer install ‏(3.3)
استعلام N+1 / تطبيق بطيءاستعلام لكل عنصر (ORM) ؛ استعلامات غير مفهرسة ؛ لا تخزين مؤقتالتحميل المسبق للعلاقات (eager loading) ؛ فهرسة الأعمدة المطلوبة ؛ التخزين المؤقت (Redis) ؛ التحليل قبل (5.2)
« يعمل محلياً لكن لا يعمل على الخط »بيئة مختلفة (نسخة PHP، وامتدادات، وحالة أحرف Windows/Linux، وإعداد)مواءمة النسخ ؛ الصرامة في حالة أحرف الملفات ؛ التحويل إلى حاويات (Docker) ؛ إعداد حسب البيئة (0.2, 5.3)
أخطاء مفصلة معروضة في الإنتاجdisplay_errors بقي مفعلاً (إعداد تطوير منشور كما هو)تعطيل العرض، وتسجيل الأخطاء ؛ تكييف الإعداد مع الإنتاج (5.4)
خطأ شائع في الفهم: « الدليل يعوض التشخيص ». خطأ. الجدول يعطي أسباباً محتملة، لا حكماً : اقرأ الرسالة (ملف + سطر)، وتحقق، ثم طبق الإجراء المستهدف للمستوى المشار إليه.
نص المخطط (SEO / قارئات الشاشة / الترجمة): منهج الدليل : 1) تسمية العرض الملاحظ (syntax error، ومتغير حرفي، وPOST فارغ، وحقن، وXSS، وسر، وتحميل تلقائي، وN+1، وفرق الإنتاج، وأخطاء مكشوفة). 2) استبقاء الأسباب المحتملة للجدول دون استنتاج وحيد. 3) تطبيق الإجراءات بالترتيب (السطر السابق، وحالة الأحرف، وisset الصارم، والمحضرة، وhtmlspecialchars، و.env، وdump-autoload، والفهرس، وDocker). ‏4) قراءة ملف + سطر الرسالة والتوثيق لتجنب التكرار. الدرس : عرض يعود يستدعي منعكساً، لا تعديلات عشوائية.

نص جاهز للقول — تشخيص دون لمس عشوائي (30 ثانية)

« عرضي : [syntax error / متغير حرفي / POST فارغ / حقن / بطء / فرق الإنتاج]. أقرأ الملف والسطر، وأحدد السبب المحتمل للدليل، وأطبق الإجراء المستهدف وأتحقق. »

نموذج نسخ ولصق — قاعدة أخطاء سليمة (تطوير مقابل إنتاج)

prepare("SELECT id FROM articles WHERE id = :id");
    $stmt->execute(["id" => $id]);
} catch (PDOException $e) {
    error_log($e->getMessage());
    echo $enProd ? "Service indisponible." : $e->getMessage();
}

شركة صغيرة جداً / ميزانية صغيرة

لا جدول رسمي : عرض واحد، والسبب المحتمل للدليل، والإجراء والمسؤول مدون.

شركة صغيرة ومتوسطة في قسنطينة

دمج الواقع المحلي في التشخيص : النسخ المثبتة، والحواسيب المشتركة، وذروات النشاط المعروفة.

عن بعد / هجين

إضافة السجلات المكتوبة الفورية إلى الإجراءات : عن بعد، عرض غير مدون يشبه نظاماً يعمل.

بين الثقافات

توضيح الملاحظات كتابة : ما يبدو بديهياً (أي نسخة، وأي بيئة) ليس كذلك للجميع.

حذر: تذكير عام : عند سر مكشوف (كلمة مرور مكتوبة مكشوفة، وتسرب في Git)، أعد توليده فوراً، وانقله إلى متغير بيئة واعرض على المرجع المعين ؛ هذا الدليل لا يقدم رأياً قانونياً.

تحدي 48 ساعة — طبّق غداً

حدد عرضاً حالياً واحداً (خطأ صياغة، وPOST فارغ، وبطء)، وطبق سطر الدليل (رسالة مقروءة + سبب متحقق منه + إجراء مستهدف).

قائمة الخروج من القسم
  • أعرف ربط العرض بأسبابه المحتملة.
  • أقرأ ملف + سطر قبل التصحيح.
  • أعرف الإحالة نحو المستوى المعمق لحالتي.
تقييم ذاتي 1-5 : تشخيص قبل التعديل ؟رسائل الخطأ مقروءة بانتباه ؟
تحقّق من فهمك

صفحة رياد تعرض سكربتاً أدخله زائر بدل عرضه كنص. أي منعكس يطبق الدليل ؟

💡

نفس العرض الذي يعود ليس عشر أعطال : إنه منعكس ناقص يجب تثبيته (السطر السابق، وحالة الأحرف الدقيقة، وisset الصارم، والمحضرة، وhtmlspecialchars، و.env، وdump-autoload).