PHP ออกเวอร์ชันใหม่ปีละครั้ง
เลขเวอร์ชันของ PHP มีสามส่วน อย่าง 8.4.27 เลข 8.4 คือ branch หรือ minor version ที่ออกปีละครั้งช่วงปลายเดือนพฤศจิกายน มาพร้อมฟีเจอร์ใหม่ และอาจมีของที่ประกาศเลิกใช้ ส่วนเลขท้าย .27 คือ patch release ที่ออกตามมาเรื่อย ๆ ใน branch นั้น แก้บั๊กกับช่องโหว่โดยไม่เพิ่มฟีเจอร์
ช่วงหลัง 8.3 ออกวันที่ 23 พ.ย. 2566, 8.4 ออก 21 พ.ย. 2567 และ 8.5 ออก 20 พ.ย. 2568 ส่วน 8.6 มีกำหนดออก 19 พ.ย. 2569 อีกไม่ถึงเดือน
RFC เรื่องขั้นตอน release ที่ PHP ใช้มาตั้งแต่ปี 2553 วางกติกาไว้ว่า patch ใน branch เดียวกันต้องไม่ทำให้โค้ดเดิมพัง อัปเดตจาก 8.4.26 เป็น 8.4.27 จึงทำได้เลย ส่วนขึ้นจาก 8.3 ไป 8.4 ควรอ่าน migration guide ของเวอร์ชันนั้นก่อน อย่างของ 8.4
แต่ละเวอร์ชันได้ support 4 ปี
หน้า Supported Versions ของ php.net แบ่งอายุของแต่ละ branch เป็นสามช่วง
- Active support สองปีแรก นับจากวันออก แก้ทั้งบั๊กทั่วไปและช่องโหว่ที่มีคนรายงาน มี patch ออกเป็นรอบปกติ
- Security fixes อีกสองปี แก้เฉพาะช่องโหว่ร้ายแรง ออก release เมื่อมีเรื่องต้องแก้ บางช่วงอาจออกหลายตัว บางช่วงอาจไม่ออกเลย
- End of life (EOL) หลังครบสี่ปีก็ไม่มีใครแก้อะไรให้แล้ว php.net ย้ายเวอร์ชันนั้นไปไว้ในตาราง EOL และบอกให้อัปเกรดโดยเร็ว เพราะช่องโหว่ที่เจอหลังจากนี้จะไม่มีแพตช์
ทุกช่วงจบวันที่ 31 ธ.ค. ของปี ทั้งที่เวอร์ชันออกปลายเดือนพฤศจิกายน active support จริงจึงยาวกว่าสองปีอยู่เดือนกว่า ๆ อย่าง 8.4 ที่ออก 21 พ.ย. 2567 ได้ active support ถึง 31 ธ.ค. 2569 และได้แพตช์ความปลอดภัยต่อถึง 31 ธ.ค. 2571

เส้นประคือวันนี้ (ต.ค. 2569) ช่วงสีเขียวคือ active support ช่วงสีเหลืองคือ security fixes ส่วน 8.6 ยังไม่ออก จึงวาดตามกติกาเดียวกัน
ตอนนี้มีแค่ 8.4 กับ 8.5 ที่ยังแก้บั๊กให้
สถานะ ณ วันที่ 26 ต.ค. 2569 จากหน้า Supported Versions และตาราง EOL
| เวอร์ชัน | ออกเมื่อ | active support ถึง | security fixes ถึง | ตอนนี้อยู่ช่วงไหน |
|---|---|---|---|---|
| 8.1 | 25 พ.ย. 2564 | 25 พ.ย. 2566 | 31 ธ.ค. 2568 | หมดอายุแล้ว ตัวสุดท้ายคือ 8.1.34 |
| 8.2 | 8 ธ.ค. 2565 | 31 ธ.ค. 2567 | 31 ธ.ค. 2569 | security fixes เหลืออีกราวสองเดือน |
| 8.3 | 23 พ.ย. 2566 | 31 ธ.ค. 2568 | 31 ธ.ค. 2570 | security fixes |
| 8.4 | 21 พ.ย. 2567 | 31 ธ.ค. 2569 | 31 ธ.ค. 2571 | active support ปีสุดท้าย |
| 8.5 | 20 พ.ย. 2568 | 31 ธ.ค. 2570 | 31 ธ.ค. 2572 | active support |
php.net ยังไม่ใส่ 8.6 ในตาราง ถ้าออกตามกำหนด กติกาเดียวกันจะให้ active support ถึง 31 ธ.ค. 2571 และ security fixes ถึง 31 ธ.ค. 2573
ช่วง security fixes มีผลกับเรามากกว่าที่คิด ถ้าเว็บเราอยู่บน 8.3 แล้วเจอบั๊กใน function ของ PHP ที่ไม่ใช่ช่องโหว่ ทีม PHP จะแก้ให้ใน 8.4 กับ 8.5 เท่านั้น 8.3 จะไม่ได้แพตช์นั้น ข้อยกเว้นเดียวคือบั๊กที่เกิดจากแพตช์ที่ใส่เข้าไปในช่วง 12 เดือนล่าสุด ส่วนช่องโหว่ร้ายแรง ทุกเวอร์ชันที่ยังมี support ได้แพตช์พร้อมกัน อย่างช่วง PHP2Shell ที่ 8.2 ถึง 8.5 ได้ release ใหม่ครบทั้งสี่ตัว ขณะที่ 8.1 ลงไปได้แค่ source backport ไว้ให้คนที่ build PHP เอง
นโยบายนี้เพิ่งขยายเป็น 4 ปีเมื่อปี 2567
ถ้าเคยอ่านว่า PHP แต่ละเวอร์ชันมี support 3 ปี ก็ไม่ผิด ตาม RFC ปี 2553 ตัวเดิม แต่ละเวอร์ชันได้แก้บั๊ก 2 ปี และแก้ช่องโหว่อีกแค่ 1 ปี วันหมดอายุนับจากวันออกจริง จึงขยับไปทุกปี อย่าง 7.4 หมดวันที่ 28 พ.ย. 2565 และ 8.0 หมดวันที่ 26 พ.ย. 2566
เดือนเมษายน 2567 RFC Release Cycle Update ของ Jakub Zelenka กับ Derick Rethans ผ่านโหวต 31 ต่อ 0 ให้ขยายช่วง security fixes เป็น 2 ปี และให้ทุกช่วงจบวันที่ 31 ธ.ค. ใช้กับ 8.2 ขึ้นไปทันที และให้ 8.1 ได้แพตช์ความปลอดภัยเพิ่มอีกปีด้วย 8.1 ที่เดิมจะหมดปลายปี 2567 จึงอยู่ได้ถึง 31 ธ.ค. 2568
บทความหรือคู่มือที่เขียนก่อนปี 2567 จึงอาจยังบอกว่า 3 ปี และวันหมดอายุในนั้นก็อาจเร็วกว่าของจริง ดูจากหน้า Supported Versions ของ php.net จะตรงที่สุด
PHP ที่มากับ Ubuntu นับอายุตามรอบของ Ubuntu
Ubuntu แต่ละรุ่นมาพร้อม PHP เวอร์ชันเดียว Ubuntu 22.04 มากับ 8.1 และ 24.04 มากับ 8.3 Canonical ดูแล package ใน repository main ด้วยแพตช์ความปลอดภัยตลอด standard support 5 ปีของรุ่น ซึ่ง PHP ก็อยู่ใน main
php.net หยุดดูแล 8.1 ไปตั้งแต่ 31 ธ.ค. 2568 แต่ php8.1 บน Ubuntu 22.04 ยังได้แพตช์ PHP2Shell เป็น 8.1.2-1ubuntu2.28 เมื่อ 21 ต.ค. 2569 และจะได้แพตช์ความปลอดภัยต่อไปจนจบ standard support ของ 22.04 ในเดือนพฤษภาคม 2570 ส่วน 24.04 อยู่ถึงพฤษภาคม 2572
ต่างกันอยู่สองเรื่อง
- เลขเวอร์ชันไม่ขยับ Ubuntu backport แพตช์ลงเวอร์ชันเดิม
php -vบน 22.04 จึงยังขึ้น 8.1.2 แม้จะแพตช์ล่าสุดแล้ว ต้องดูจากเลข package แทน - ได้เฉพาะแพตช์ความปลอดภัยที่ Canonical เลือกแก้ บั๊กทั่วไปที่ทีม PHP แก้ใน 8.1.x ช่วงหลังไม่ได้ตามมาด้วย
ส่วน PHP ที่ลงจาก PPA ของ Ondřej Surý ใช้เลขเวอร์ชันตาม php.net จึงนับอายุตามตารางของ php.net ถ้าองค์กรยังต้องรันเวอร์ชันที่หมดอายุแล้ว ทางที่มีคือซื้อบริการ LTS อย่าง Freexian ที่เล่าไว้ในโพสต์นั้น
Laravel ก็มีรอบ support ของตัวเอง
นโยบายของ Laravel แก้บั๊กให้แต่ละเวอร์ชัน 18 เดือน และแก้ช่องโหว่ 2 ปี แต่ละเวอร์ชันรองรับ PHP เป็นช่วง (รายละเอียดอยู่ในโพสต์นโยบาย support ของ Laravel)
| Laravel | PHP ที่รองรับ | security fixes ถึง |
|---|---|---|
| 11 | 8.2 ถึง 8.4 | 12 มี.ค. 2569 (หมดแล้ว) |
| 12 | 8.2 ถึง 8.5 | 24 ก.พ. 2570 |
| 13 | 8.3 ถึง 8.5 | 17 มี.ค. 2571 |
เวลาวางแผนอัปเกรด เราจึงต้องดูทั้งสองตารางไปพร้อมกัน อย่างเว็บที่เป็น Laravel 12 บน PHP 8.2 ตัว PHP จะหมดอายุก่อน Laravel ราวสองเดือน ขยับ PHP ขึ้นเป็น 8.4 หรือ 8.5 ก่อนได้เลย เพราะ Laravel 12 รองรับอยู่แล้ว และพอจะขึ้น Laravel 13 ก็ไม่ต้องย้าย PHP อีกรอบ
กรณีที่อาจเจอตอนวางแผนอัปเกรด
- เซิร์ฟเวอร์ยังเป็น 8.2 สิ้นปีนี้จะหมดอายุ ถ้า package ที่ใช้รองรับแล้ว ขึ้นไป 8.5 จะได้อยู่ใน active support ยาวที่สุดในบรรดาเวอร์ชันที่ออกแล้ว ส่วน 8.4 จะหมด active support สิ้นปีนี้ แต่ยังได้แพตช์ความปลอดภัยถึงปี 2571
- Shared hosting ที่ยังให้เลือก 7.4 หรือ 8.0 ตัวเลือกใน cPanel หรือ DirectAdmin ยังอยู่ ไม่ได้แปลว่าเวอร์ชันนั้นยังมีคนแพตช์ให้ ถามผู้ให้บริการก่อนว่าได้แพตช์จากไหน หรือย้ายไปเวอร์ชันที่ยังมี support
- Ubuntu 22.04 ที่ใช้ PHP 8.1 ของ Ubuntu ยังได้แพตช์ความปลอดภัยถึงพฤษภาคม 2570 แต่ Laravel 12 ขึ้นไปต้องใช้ 8.2 ถ้าจะใช้ Laravel เวอร์ชันที่ยังมี support ก็ต้องลง PHP ใหม่จาก PPA หรืออัปเกรด Ubuntu
php -vบอกแค่ PHP CLI เว็บจริงรันผ่าน PHP-FPM ซึ่งอาจเป็นคนละเวอร์ชัน วิธีเช็คตัวที่ nginx ส่ง request ไปหาอยู่ในโพสต์ PHP2Shell- โค้ดเก่าที่ต้องปรับตามเวอร์ชันใหม่ Rector ช่วยเขียนโค้ดใหม่ตามเวอร์ชัน PHP และ Laravel ที่จะขึ้นไปให้ได้ ส่วนเรื่องที่ Rector ไม่รู้ ดูได้จาก migration guide ของแต่ละเวอร์ชันบน php.net






