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 และอัปเดตอย่างสม่ำเสมอ
แหล่งข้อมูล
- Remi Repository: Install PHP 8.4 on CentOS Stream 9
- PHP: Supported Versions
- Remi Repository: PHP 8.4.27 Release Information
