คู่มืออัปเกรด PHP 5.x เป็น PHP 7.x บน CentOS 7/RHEL 7 โดยใช้ IUS Repository (เพราะ Repo Oficial ไม่มี PHP 7)
ข้อกำหนดเบื้องต้น
- CentOS 7 / RHEL 7 ติดตั้ง PHP 5.x แล้ว
- Apache กับ mod_php เปิดใช้งาน
- สิทธิ์ Root หรือ Sudo
- Backup ก่อนเริ่ม! (Config, Database, Code)
ขั้นตอนที่ 1: ติดตั้ง IUS Repository
# ดาวน์โหลดและติดตั้ง IUS Setup Script
curl 'https://setup.ius.io/' -o setup-ius.sh
bash setup-ius.sh
Script จะตรวจสอบ OS, ติดตั้ง EPEL และ IUS Repository อัตโนมัติ
ขั้นตอนที่ 2: ลบ PHP 5.x เก่า (mod_php)
# ดู Package ที่ติดตั้งอยู่
rpm -qa | grep php
# ลบ PHP 5.x packages
yum remove php-cli mod_php php-common php-*
ขั้นตอนที่ 3: ติดตั้ง PHP 7.x จาก IUS
# ค้นหา Package PHP 7 ที่มี
yum search php7 | grep -E 'php7[0-9]-'
# ติดตั้ง PHP 7.4 (แนะนำ LTS) + Extensions พื้นฐาน
yum install php74u-cli php74u-fpm php74u-mysqlnd php74u-gd php74u-mbstring php74u-xml php74u-json php74u-opcache php74u-curl php74u-zip php74u-intl php74u-bcmath
# สำหรับ Apache mod_php (ถ้าใช้ mod_php แทน PHP-FPM)
yum install mod_php74u
หมายเหตุ: IUS ใช้ Naming แบบ php74u-* สำหรับ PHP 7.4, php73u-* สำหรับ 7.3, ฯลฯ
ขั้นตอนที่ 4: ปรับ Config (php.ini)
# Backup config เดิม
cp /etc/php.ini /etc/php.ini.bak.5.6
# แก้ไข php.ini ใหม่ (PHP 7 default อยู่ที่ /etc/php.ini)
vi /etc/php.ini
# การตั้งค่าสำคัญ:
# memory_limit = 256M
# upload_max_filesize = 20M
# post_max_size = 20M
# max_execution_time = 300
# date.timezone = Asia/Bangkok
# opcache.enable=1
# opcache.memory_consumption=128
ขั้นตอนที่ 5: Restart Services
# Apache + mod_php
systemctl restart httpd
# หรือ PHP-FPM (แนะนำสำหรับ Production)
systemctl restart php-fpm
systemctl restart nginx # ถ้าใช้ Nginx
ขั้นตอนที่ 6: ทดสอบ
# CLI
php -v
# PHP 7.4.x (cli) (built: ...)
# Web: สร้าง info.php
echo ' /var/www/html/info.php
# เปิด https://your-server/info.php
ขั้นตอนที่ 7: ทดสอบ Application (สำคัญ!)
- รัน Test Suite (PHPUnit, Codeception)
- ตรวจสอบ Deprecated Warnings ใน Log
- ทดสอบ Feature หลัก: Login, Form Submit, API, Report
- ตรวจสอบ Extensions: Redis, Memcached, MongoDB, etc.
ปัญหาที่พบบ่อย (Breaking Changes PHP 5 → 7)
| ปัญหา | PHP 5 | PHP 7 | แก้ไข |
|---|---|---|---|
| mysql_* functions | ทำงาน | Removed | ใช้ mysqli หรือ PDO |
| split() | ทำงาน | Removed | ใช้ preg_split/explode |
| each() | ทำงาน | Deprecated → Removed 8.0 | ใช้ foreach |
| Constructor Name = Class Name | ทำงาน | Deprecated | ใช้ __construct() |
| Static Call Non-static Method | Warning | Error/Deprecated | สร้าง Instance ก่อน |
| Uniform Variable Syntax | $obj->$prop['key'] | ($obj->$prop)['key'] | เพิ่ม Parentheses |
Rollback Plan (ถ้ามีปัญหา)
# ลบ PHP 7
yum remove php74u* mod_php74u
# ติดตั้ง PHP 5.6 กลับ (จาก Repo เดิม หรือ IUS php56u)
yum install php56u-cli php56u-fpm php56u-mysqlnd ...
systemctl restart httpd/php-fpm