إصدارُ PHP القديم أبطأ، ومتى خرج من الدعم الأمنيّ كفّ عن تلقّي إصلاحاتٍ لمشكلاتٍ صارت علنيّة. والترقيةُ بلا ألمٍ في العادة، والخطرُ من التحويل بلا فحص، والفحصُ عشر دقائق.
اعرف ما سينكسر أوّلًا
composer require --dev php-parallel-lint/php-parallel-lint
vendor/bin/parallel-lint --exclude vendor .
هذا يحلّل كلّ ملفّ مقابل الإصدار العامل ويسمّي كلّ ما لن يُترجَم. ولا يلتقط تغيّرات السلوك، لكنّه يلتقط تغيّرات النحو، وهي أكثرها.
اختبر على نسخة
- انسخ الموقع إلى نطاقٍ فرعيٍّ للتجربة —
- حوّل ذلك إلى الإصدار الجديد — في EGPNL، لكلّ موقع على حدة.
- فعّل الأخطاء في التجربة وحدها — display_errors هناك، ولا على الحيّ أبدًا.
- امشِ في المسارات التي تعني — سجّل الدخول، وأرسل نموذجًا، وادفع، ونفّذ سكربت الجدولة بيدك.
ما ينكسر عادةً
- إضافةٌ أو مكتبةٌ مهجورة تستعمل شيئًا حُذف قبل سنين.
- تمريرُ null حيث يُنتظَر نصّ — تنبيهُ هجرانٍ في 8.1 يصير ضجيجًا في السجلّ لا خطأً، لكنّه ضجيجٌ كثير.
- امتدادٌ غير مثبَّتٍ للإصدار الجديد — فلكلّ إصدارٍ طقمُه، وهذه أشيع المفاجآت.
php -m # under the new version, compare against the old
الرجوع
إعادةُ الإصدار من اللوحة فوريّة ولا تغيّر شيئًا آخر، فأسوأُ الأحوال دقائق. وهذا ما يجعل التجربة رخيصة.
افحص السجلّ بعد التحويل، لا الصفحاتِ وحدها. فتنبيهُ الهجران يكتب مع كلّ طلب وقد يملأ قرصًا في يوم وليس شيءٌ يبدو معطوبًا.
انتقل إصدارًا إصدارًا. فمن 7.4 إلى 8.3 في قفزةٍ واحدة يعطيك التغيّرات كلَّها دفعةً واحدة بلا سبيلٍ لتعرف أيُّها كسر ماذا.