วิธีอัปเดต PHP 8.1.32 เป็น PHP 8.4.27 บน CentOS Stream 9


PHP เป็นส่วนสำคัญของเว็บไซต์ที่พัฒนาด้วย PHP รวมถึงระบบ CMS และเว็บแอปพลิเคชันต่าง ๆ การใช้งาน PHP เวอร์ชันเก่าที่หมดระยะสนับสนุนอาจทำให้ระบบไม่ได้รับการแก้ไขช่องโหว่ด้านความปลอดภัยจากโครงการ PHP อีกต่อไป

บทความนี้จะแนะนำวิธีอัปเกรด PHP จากเวอร์ชัน 8.1.32 เป็น PHP 8.4.27 บน CentOS Stream 9 โดยใช้ Remi Repository พร้อมตรวจสอบ PHP-FPM และ Apache หลังอัปเดต

1. ตรวจสอบเวอร์ชัน PHP เดิม

เชื่อมต่อเซิร์ฟเวอร์ผ่าน SSH ด้วยบัญชี root หรือบัญชีที่มีสิทธิ์ sudo แล้วตรวจสอบเวอร์ชัน PHP:

php -v

ตัวอย่างผลลัพธ์ก่อนอัปเดต:

PHP 8.1.32 (cli) (built: ...)
Zend Engine v4.1.32

ตรวจสอบแพ็กเกจ PHP ที่ติดตั้งอยู่:

rpm -qa 'php*' | sort

ตรวจสอบ PHP module และ repository:

dnf module list --enabled php
dnf repolist

ควรตรวจสอบด้วยว่าเว็บไซต์ใช้ PHP-FPM หรือ mod_php รวมถึงมีส่วนขยาย PHP ที่จำเป็นต่อการทำงานหรือไม่

2. สำรองการตั้งค่าก่อนอัปเดต

ก่อนเปลี่ยนเวอร์ชัน PHP ควรสำรองไฟล์ตั้งค่าไว้ก่อน:

cp -a /etc/php.ini /etc/php.ini.backup
cp -a /etc/php.d /etc/php.d.backup
cp -a /etc/php-fpm.d /etc/php-fpm.d.backup

หากมีเว็บไซต์หรือฐานข้อมูลที่สำคัญ ควรสำรองข้อมูลเว็บไซต์ ฐานข้อมูล และไฟล์ตั้งค่าของ Apache เพิ่มเติมด้วย

3. ติดตั้ง Remi Repository

Remi Repository มีแพ็กเกจ PHP หลายเวอร์ชันสำหรับระบบ Enterprise Linux รวมถึง CentOS Stream 9

ติดตั้งเครื่องมือและ repository ที่จำเป็น:

dnf install -y dnf-plugins-core
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm

เปิด CRB repository:

dnf config-manager --set-enabled crb

จากนั้นอัปเดต metadata:

dnf clean metadata
dnf makecache

หมายเหตุ: หากติดตั้ง EPEL หรือ Remi Repository ไว้แล้ว สามารถตรวจสอบก่อนและไม่จำเป็นต้องติดตั้งซ้ำ

4. เปลี่ยน PHP จาก 8.1 เป็น 8.4

ใช้คำสั่งต่อไปนี้เพื่อเปลี่ยน PHP module stream ไปยัง Remi PHP 8.4:

dnf module switch-to php:remi-8.4/common

คำสั่งนี้ใช้กับ DNF 4 บน CentOS Stream 9 เพื่อเปลี่ยนไปใช้แพ็กเกจ PHP จาก Remi stream 8.4 โดยอาจมีการเปลี่ยน dependencies ตามแพ็กเกจที่ติดตั้งอยู่

หาก DNF แจ้งปัญหา dependencies หรือส่วนขยายที่ไม่รองรับ ควรตรวจสอบข้อผิดพลาดก่อนดำเนินการต่อ ไม่ควรบังคับลบแพ็กเกจโดยไม่ทราบผลกระทบ

5. อัปเดตแพ็กเกจ PHP

หลังจากเปลี่ยน module stream สำเร็จ ให้สั่งอัปเดตแพ็กเกจ PHP:

dnf upgrade -y 'php*'

หากต้องการตรวจสอบรายการแพ็กเกจ PHP ที่ติดตั้งอยู่:

rpm -qa 'php*' | sort

6. รีสตาร์ต PHP-FPM และ Apache

หากเซิร์ฟเวอร์ใช้ PHP-FPM ร่วมกับ Apache ให้รีสตาร์ตบริการ:

systemctl restart php-fpm
systemctl restart httpd

ตรวจสอบสถานะบริการ:

systemctl status php-fpm --no-pager
systemctl status httpd --no-pager

บริการควรแสดงสถานะ active (running)

หากต้องการให้ PHP-FPM เริ่มทำงานโดยอัตโนมัติหลังรีบูต:

systemctl enable php-fpm

หากใช้ระบบจัดการเว็บไซต์ เช่น Hestia หรือมี PHP-FPM หลายเวอร์ชัน ควรตรวจสอบการตั้งค่าของแต่ละเว็บไซต์ก่อนเปลี่ยนหรือเปิดใช้งานบริการ

7. ตรวจสอบ PHP หลังอัปเดต

ตรวจสอบ PHP CLI:

php -v

ตรวจสอบ PHP-FPM:

php-fpm -v

ตรวจสอบแพ็กเกจหลัก:

rpm -q php-common php-cli php-fpm

ตัวอย่างผลลัพธ์หลังอัปเดต:

PHP 8.4.27 (cli)
Zend Engine v4.4.27

php-common-8.4.27-1.module_php.8.4.el9.remi.x86_64
php-cli-8.4.27-1.module_php.8.4.el9.remi.x86_64
php-fpm-8.4.27-1.module_php.8.4.el9.remi.x86_64

เวอร์ชันแพ็กเกจอาจแตกต่างกันตามการอัปเดต repository ในอนาคต

8. ตรวจสอบ Apache ว่ารองรับ PHP-FPM

ตรวจสอบโมดูล Apache:

httpd -M | grep -E 'proxy_fcgi|proxy_module'

ควรพบโมดูลลักษณะนี้:

proxy_module (shared)
proxy_fcgi_module (shared)

ตรวจสอบ syntax ของ Apache:

apachectl configtest

หากแสดง:

Syntax OK

หมายถึงไฟล์ตั้งค่า Apache ผ่านการตรวจสอบ syntax แล้ว แต่ยังควรทดสอบเว็บไซต์จริงเพิ่มเติม

ตรวจสอบการตั้งค่า PHP handler:

grep -R -nE 'SetHandler|proxy:unix|proxy:fcgi|ProxyPassMatch' \
/etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d

หากมีเว็บไซต์ที่ส่ง PHP ไปยังพอร์ต FastCGI เช่น 9000 หรือ 9006 ต้องตรวจสอบด้วยว่ามี PHP-FPM pool หรือบริการที่ฟังพอร์ตเหล่านั้นอยู่จริง อย่าเปลี่ยนพอร์ตหรือลบการตั้งค่าโดยไม่ตรวจสอบก่อน

9. ตรวจสอบส่วนขยาย PHP

การเปลี่ยนจาก PHP 8.1 เป็น 8.4 อาจทำให้ส่วนขยายบางตัวต้องติดตั้งใหม่หรือเปลี่ยนแพ็กเกจให้ตรงกับเวอร์ชันใหม่

ตรวจสอบส่วนขยาย:

php -m

ตรวจสอบแพ็กเกจ PHP ทั้งหมด:

rpm -qa 'php*' | sort

ควรตรวจสอบส่วนขยายที่เว็บไซต์ใช้งานจริง เช่น mysqli, pdo_mysql, mbstring, xml, curl, gd, intl, zip และ opcache ตามความจำเป็นของแอปพลิเคชัน

10. ทดสอบเว็บไซต์หลังอัปเดต

หลังจากอัปเดตเสร็จ ควรทดสอบเว็บไซต์ผ่าน HTTP และ HTTPS รวมถึงตรวจสอบ:

  • หน้าเว็บไซต์หลักและระบบเข้าสู่ระบบ
  • การเชื่อมต่อฐานข้อมูล
  • การอัปโหลดไฟล์และการทำงานของส่วนขยาย PHP
  • ระบบ Cron และสคริปต์ PHP ที่ทำงานเบื้องหลัง
  • บันทึกข้อผิดพลาดของ Apache และ PHP-FPM

ตรวจสอบ log ได้ด้วยคำสั่ง:

journalctl -u php-fpm -u httpd -n 100 --no-pager

หากเว็บไซต์แสดง HTTP 500 หรือหน้าเปล่า ควรตรวจสอบ error log และความเข้ากันได้ของโค้ดกับ PHP 8.4 ก่อนแก้ไขการตั้งค่าเพิ่มเติม

สรุป

การอัปเดต PHP จาก 8.1.32 เป็น 8.4.27 บน CentOS Stream 9 สามารถทำได้ผ่าน Remi Repository โดยเปลี่ยน module stream เป็น php:remi-8.4 จากนั้นอัปเดตแพ็กเกจและตรวจสอบ PHP-FPM, Apache และเว็บไซต์จริง

การอัปเดตครั้งนี้ช่วยให้ระบบเปลี่ยนไปใช้ PHP สาย 8.4 ซึ่งมีระยะเวลาสนับสนุนยาวกว่า PHP 8.1 ที่สิ้นสุดการสนับสนุนจากโครงการหลักแล้ว อย่างไรก็ตาม ควรติดตามแพ็กเกจรุ่นใหม่จาก repository และอัปเดตอย่างสม่ำเสมอ

แหล่งข้อมูล

, ,