إصدارُ PHP الخارج عن الدعم يظلّ يعمل على أتمّ وجه ويكفّ عن تلقّي الإصلاحات الأمنيّة. ولا يبدو شيءٌ معطوبًا، ولذلك تجلس المواقع عليه سنين — ولذلك أيضًا يكون إصدارُ PHP القديم من أوّل ما يفحصه المهاجم.
ترقيتان مختلفتان
- إصدارات الترقيع — من 8.3.10 إلى 8.3.11. إصلاحاتٌ أمنيّة وعلَليّة فقط، بلا تغيّرٍ في السلوك. طبّقها آليًّا.
- الإصدارات الكبرى — من 8.2 إلى 8.3. وقد تحذف سلوكًا مهجورًا تعتمد عليه شفرتك. وهذه تحتاج فحصًا أوّلًا.
أتمِت إصدارات الترقيع
sudo apt-get install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
grep -A5 "Allowed-Origins" /etc/apt/apt.conf.d/50unattended-upgrades
حضّر للإصدار الكبير كما ينبغي
- اعرف ما ينكسر، فحصًا ساكنًا —
vendor/bin/rector process --dry-runأوphpcs --standard=PHPCompatibility --runtime-set testVersion 8.3 - ثبّت الإصدار الجديد جنب القديم — فوجودُهما معًا ممكن، والحوضُ وحده يقرّر أيّهما يعمل.
- وجّه بيئة التجربة إليه وشغّل الموقع فيها — الدفع والرفع والبريد والمهامّ المجدولة.
- حوّل حوض الإنتاج، وأبقِ الإصدار القديم مثبَّتًا — فيكون الرجوع سطرًا واحدًا وإعادةَ تحميل.
sudo apt-get install -y php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-curl php8.3-xml
# nginx
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
sudo nginx -t && sudo systemctl reload nginx
ثمّ افحص ما هو محمَّل لا ما هو مثبَّت
php -v # the CLI version
curl -sSI https://yourdomain.com | grep -i x-powered-by
php -m | sort # the modules the site actually has
إصدارُ سطر الأوامر وإصدارُ الوِب منفصلان. فقد تعمل مهمّةٌ مجدولة على PHP 8.1 والموقعُ على 8.3، فيظهر التفاوت إخفاقًا لا يقع إلّا ليلًا.
على استضافة EGPHP الإصدارُ قائمةٌ منسدلة، وإصداراتُ الترقيع تُطبَّق عنك، والإصدارُ السابق يبقى متاحًا. انظر ترقية إصدار PHP عندك.