PHP code programming

อัปเกรด PHP Version บน VPS อย่างปลอดภัย ไม่ให้เว็บพัง

มิถุนายน 2026 · อ่าน 7 นาที

PHP 7.4 หมด EOL ไปแล้วตั้งแต่ปลายปี 2022 ถ้ายังรัน PHP รุ่นเก่าอยู่แปลว่าไม่ได้รับ security patch มีช่องโหว่ที่รู้อยู่แล้วและไม่มีใครแก้ให้ บทความนี้วางแผนอัปเกรดอย่างมีขั้นตอน


ทำไมต้องอัปเกรด PHP

ตรวจสอบ 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 รุ่นเก่าทันที เก็บไว้ก่อนจนมั่นใจว่าทุกอย่างทำงานปกติ

WordPress: ก่อนอัปเกรด PHP ตรวจสอบ compatibility ของ plugin ทุกตัวที่ใช้งานอยู่ด้วย plugin อย่าง PHP Compatibility Checker

ตรวจสอบสุขภาพโดเมนและ 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   # ลบทิ้งทันที
ตรวจ extension ครบ: รัน 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