อัปเกรด PHP Version บน VPS อย่างปลอดภัย ไม่ให้เว็บพัง
PHP 7.4 หมด EOL ไปแล้วตั้งแต่ปลายปี 2022 ถ้ายังรัน PHP รุ่นเก่าอยู่แปลว่าไม่ได้รับ security patch มีช่องโหว่ที่รู้อยู่แล้วและไม่มีใครแก้ให้ บทความนี้วางแผนอัปเกรดอย่างมีขั้นตอน
ทำไมต้องอัปเกรด PHP
- PHP 7.4: หมด EOL พฤศจิกายน 2022 — ไม่มี security patch
- PHP 8.0: หมด EOL พฤศจิกายน 2023
- PHP 8.1: Active support ถึงพฤศจิกายน 2025
- PHP 8.3: Active support ถึงพฤศจิกายน 2026 (แนะนำ)
- PHP 8.x เร็วกว่า PHP 7.x ประมาณ 20–30%
ตรวจสอบ PHP Version ปัจจุบัน
php -v
php-fpm8.1 -v # หรือ version ที่ใช้อยู่
เพิ่ม Ondřej Surý PPA (Ubuntu)
Ubuntu มี PHP เวอร์ชันเก่าใน default repo ต้องเพิ่ม PPA ของ Ondřej Surý ซึ่งเป็น Debian PHP maintainer:
add-apt-repository ppa:ondrej/php
apt update
ติดตั้ง PHP 8.3 และ Extensions
apt install php8.3 php8.3-fpm php8.3-cli \
php8.3-mysql php8.3-curl php8.3-gd \
php8.3-mbstring php8.3-xml php8.3-zip \
php8.3-intl php8.3-bcmath php8.3-imagick
ทดสอบก่อน Switch
ก่อนเปลี่ยน production ควรทดสอบว่าแอปทำงานกับ PHP ใหม่ได้:
# ทดสอบผ่าน CLI ก่อน
php8.3 -f /var/www/html/index.php
# ตรวจ syntax error
php8.3 -l /var/www/html/wp-config.php
เปลี่ยน Nginx ให้ใช้ PHP-FPM ใหม่
# แก้ใน nginx config
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
# เดิมอาจเป็น php8.1-fpm.sock
nginx -t && systemctl reload nginx
เปลี่ยน Apache ให้ใช้ PHP-FPM ใหม่
a2disconf php8.1-fpm
a2enconf php8.3-fpm
systemctl restart apache2
Copy php.ini Settings ที่เคยแก้ไว้
diff /etc/php/8.1/fpm/php.ini /etc/php/8.3/fpm/php.ini
ดู setting ที่แตกต่างแล้ว copy ค่าที่เคยปรับไว้ เช่น upload_max_filesize, memory_limit, max_execution_time
Rollback Plan ถ้ามีปัญหา
# เปลี่ยนกลับเป็น PHP 8.1 ใน Nginx
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
nginx -t && systemctl reload nginx
ไม่ต้องลบ PHP รุ่นเก่าทันที เก็บไว้ก่อนจนมั่นใจว่าทุกอย่างทำงานปกติ
ตรวจสอบสุขภาพโดเมนและ SSL หลังอัปเกรด
หลังอัปเกรด PHP ควรตรวจสอบว่าเว็บยังทำงานปกติครบถ้วน ทั้ง SSL, response headers และ DNS เครื่องมืออย่าง dnsxray.com ช่วยตรวจสอบสุขภาพเว็บได้รวดเร็วในหน้าเดียว
ถ้ากำลังมองหา VPS ที่มี managed PHP environment หรือ hosting ที่ดูแล stack ให้ asiagb.com มีทั้งตัวเลือก VPS และ shared hosting พร้อม PHP เวอร์ชันใหม่
สรุป
อัปเกรด PHP ไม่ได้ยากถ้าทำเป็นขั้นตอน ติดตั้ง version ใหม่ควบคู่กับเก่า ทดสอบ แล้วค่อย switch ไม่ต้องรีบลบเก่าทันที ข้อดีด้าน security และ performance คุ้มค่ากับเวลาที่ใช้ไปอย่างมาก
ตรวจสอบว่า PHP อัปเกรดสำเร็จ
# ตรวจ PHP CLI version
php -v
# ตรวจ PHP-FPM ที่กำลังรัน
systemctl status php8.3-fpm
# สร้างไฟล์ test ชั่วคราว
echo "<?php echo phpversion();" > /var/www/html/phpver.php
curl -s https://example.com/phpver.php
rm /var/www/html/phpver.php # ลบทิ้งทันที
php8.3 -m เพื่อดู extension ที่ load แล้วเทียบกับ PHP เก่า ขาดอะไรให้ apt install php8.3-ชื่อ เติมแก้ปัญหาที่พบบ่อย
Error: "PHP Fatal error: Call to undefined function imagecreatetruecolor()"
Extension GD ยังไม่ได้ติดตั้งสำหรับ PHP version ใหม่:
apt install php8.3-gd
systemctl restart php8.3-fpm
Error: WordPress แสดง blank page หลัง upgrade PHP
PHP 8.x เข้มงวดกับ deprecated syntax ดู error ใน log:
# ดู error log
tail -f /var/log/nginx/error.log
tail -f /var/log/php8.3-fpm.log
# เปิด debug ชั่วคราวใน wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Error: "No input file specified" หรือ 502 หลังเปลี่ยน Nginx config
Socket path ไม่ตรงกับที่ PHP-FPM ใหม่ใช้:
# ดู socket ที่มีจริง
ls -la /run/php/
# อาจเห็น: php8.3-fpm.sock
# แก้ใน nginx config
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
nginx -t && systemctl reload nginx
Upload ไฟล์ขนาดใหญ่ไม่ได้หลัง upgrade
php.ini ของ PHP version ใหม่ใช้ค่า default ต้องตั้งใหม่:
# แก้ /etc/php/8.3/fpm/php.ini
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
memory_limit = 256M
systemctl restart php8.3-fpm
Extension bcmath / intl / mbstring หาย
apt install php8.3-bcmath php8.3-intl php8.3-mbstring php8.3-xml php8.3-zip
systemctl restart php8.3-fpm
คำถามที่พบบ่อย
มี PHP หลาย version บนเครื่องเดียวกันได้ไหม?
ได้ PHP-FPM แต่ละ version รันเป็น service แยกกัน Nginx config แต่ละ virtual host ชี้ไป socket ของ version ที่ต้องการได้ เช่น site A ใช้ PHP 8.1, site B ใช้ PHP 8.3
PHP CLI กับ PHP-FPM ต้องตรง version ไหม?
ไม่บังคับ PHP CLI ใช้กับ script ที่รันผ่าน terminal, PHP-FPM ใช้กับ web request เว็บจะใช้ version ตาม FPM socket ที่ Nginx/Apache ชี้ไป
ลบ PHP เก่าออกได้เลยไหมหลังอัปเกรด?
ได้หลังจากมั่นใจว่าทุกอย่างทำงานปกติแล้ว แนะนำรอ 1–2 สัปดาห์ก่อนลบ:
apt remove php8.1 php8.1-fpm php8.1-*
apt autoremove