PHP เสนอปิด PECL ภายในปี 2572 และ Docker image ของ PHP 8.6 ก็ไม่มี pecl แล้ว

RFC ใหม่เสนอให้ pecl.php.net เลิกรับ release ใหม่ตั้งแต่ 30 มิ.ย. 2570 และปิดเว็บ 31 ธ.ค. 2572 ส่วน Docker image ทางการของ PHP 8.6 เอาคำสั่ง pecl กับ mbstring ออกไปก่อนแล้ว Dockerfile ที่สั่ง pecl install จึงต้องย้ายไปใช้ PIE ตั้งแต่ตอนขึ้น 8.6

เผยแพร่
เวลาอ่าน
4 นาที
สรุปจาก
Eric L. Barnes · phpnews.net
แท็ก
#CI/CD#Linux#PHP
ในโพสต์นี้ 5 หัวข้อ
  1. PECL กับ PIE คืออะไร
  2. กำหนดการที่ RFC เสนอ
  3. ใครต้องทำอะไร
  4. Docker image ของ PHP 8.6 ไม่มี pecl และ mbstring แล้ว
  5. คำสั่ง PECL ที่ใช้บ่อยเทียบกับ PIE

PECL กับ PIE คืออะไร

PECL คือคลัง extension ของ PHP ที่อยู่คู่กันมาตั้งแต่ยุค PHP 4 ถ้าเคยสั่ง pecl install redis หรือ pecl install xdebug ก็คือดึง source จาก pecl.php.net มา build เอง ส่วน Windows ก็มีไฟล์ DLL ให้ดาวน์โหลดไปวางในโฟลเดอร์ ext

PIE เป็นตัวติดตั้งตัวใหม่ที่ PHP Foundation ดูแล หา extension จาก Packagist ด้วยชื่อแบบ Composer (phpredis/phpredis, xdebug/xdebug) เมื่อปี 2025 มี RFC รับ PIE มาแทน PECL ผ่านไปแล้ว แต่ตอนนั้นยังไม่ได้บอกว่าจะปิด PECL เมื่อไหร่ RFC ใหม่นี้มาเติมส่วนนั้น

กำหนดการที่ RFC เสนอ

RFC: Sunset PECL ฉบับ 0.1 ลงวันที่ 5 พ.ย. 2569 ไม่ได้ผูกกับเวอร์ชันของ PHP แต่ผูกกับวันที่

วันที่ สิ่งที่เกิดขึ้น
4 ม.ค. 2570 ขึ้นแบนเนอร์บน pecl.php.net บอกเจ้าของ extension ให้ย้ายไป PIE
30 มิ.ย. 2570 เว็บเป็นแบบอ่านอย่างเดียว ล็อกอินไม่ได้ ออก release ใหม่ไม่ได้ แต่ยังดาวน์โหลดของเดิมได้
ก.ย. ถึง ธ.ค. 2572 ปิดชั่วคราวสี่รอบ นานขึ้นเรื่อย ๆ คือ 3 ชั่วโมง, 6 ชั่วโมง, 24 ชั่วโมง และ 3 วัน รวมไฟล์สำหรับ Windows ด้วย
31 ธ.ค. 2572 ปิดเว็บถาวร extension ที่ยังไม่ย้ายไป PIE จะติดตั้งด้วย PECL ไม่ได้อีก

ช่วงปิดชั่วคราวมีไว้ให้สคริปต์ที่ยังพึ่ง PECL ล้มให้เห็นก่อนวันจริง ใครที่ build image ตามรอบก็อาจเจอ build ล้มในวันเหล่านั้น

RFC ต้องได้เสียงสองในสามถึงจะผ่าน และใน mailing list ก็ยังมีคนแย้งเรื่องความยาว Rowan Tommins มองว่าเปิดเว็บที่แก้อะไรไม่ได้ไว้สองปีครึ่งนานเกินไป ส่วน Derick Rethans เสนอให้ย่นช่วงอ่านอย่างเดียวลงหนึ่งปีแล้วปิดเร็วขึ้นหนึ่งปี วันที่ในตารางจึงยังขยับได้ แต่ทิศทางคือปิดแน่

ใครต้องทำอะไร

ใช้ PHP จาก สิ่งที่ต้องทำ
shared hosting (cPanel, DirectAdmin) ไม่ต้องทำอะไร ผู้ให้บริการเลือก extension ให้จากหน้า Select PHP Version
Ubuntu กับ ondrej PPA ไม่กระทบ extension มาจาก apt อยู่แล้ว เช่น php8.4-redis
Docker image ทางการ (php:8.x) ต้องเปลี่ยนตอนขึ้น PHP 8.6 เพราะ image ไม่มี pecl แล้ว อ่านหัวข้อถัดไป
Windows กับ Laragon หรือ XAMPP ถ้าเคยโหลด DLL จากเว็บ PECL ให้เปลี่ยนไปโหลดจากหน้า release บน GitHub ของ extension นั้น หรือใช้ pie install
สคริปต์ CI ที่สั่ง pecl install เปลี่ยนเป็น pie install ก่อนช่วงปิดชั่วคราวในปี 2572
เจ้าของ extension เพิ่ม composer.json แบบ "type": "php-ext" แล้วส่งขึ้น Packagist ก่อน 30 มิ.ย. 2570

ส่วนเจ้าของ extension ที่ต้องออก DLL ให้ Windows ด้วย เอกสารของ PIE บอกว่าต้อง build DLL ไว้ใน GitHub release เอง เพราะ PIE ยังไม่ build บน Windows ให้ ทางที่แนะนำคือ GitHub Action php/php-windows-builder

Docker image ของ PHP 8.6 ไม่มี pecl และ mbstring แล้ว

เรื่องนี้ไม่ต้องรอ RFC ทีม docker-library เอา --with-pear ออกตั้งแต่ image ของ PHP 8.6 (merge เมื่อ 25 มิ.ย. 2569) ผลคือ image php:8.6-rc ที่มีอยู่ตอนนี้ และ php:8.6 ที่จะออกพร้อมตัวจริง 19 พ.ย. ไม่มีคำสั่ง pecl ให้เรียก

อีกเรื่องที่ตามมาด้วยคือ mbstring เดิม image คอมไพล์ mbstring ไว้ในตัวเพราะ extension บางตัวที่ลงผ่าน PECL ต้องใช้ พอเอา PECL ออก ทีมก็เอา mbstring ออกด้วย แอป Laravel ต้องมี mbstring เพราะ laravel/framework ประกาศ ext-mbstring ไว้ใน composer.json ถ้าไม่ลงเพิ่ม composer install จะหยุดตั้งแต่ขั้นแรก

# เดิม บน PHP 8.5
FROM php:8.5-fpm
RUN pecl install redis \
    && docker-php-ext-enable redis

# PHP 8.6 ยืม PIE มาใช้ตอน build และลง mbstring เอง
FROM php:8.6-fpm
RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \
    apt-get update \
    && apt-get install -y --no-install-recommends unzip libonig-dev \
    && docker-php-ext-install mbstring \
    && pie install phpredis/phpredis

--mount=type=bind ผูก PIE เข้ามาเฉพาะตอนรันคำสั่งนี้ image ที่ได้จึงไม่มี PIE ติดไปด้วย PIE จะเรียก docker-php-ext-enable ให้เองเมื่อรันใน image ทางการ ส่วน libonig-dev คือไลบรารี regex ที่ mbstring ต้องใช้ตอน build บน Alpine ชื่อ package คือ oniguruma-dev ถ้าไม่ใช้ฟังก์ชัน mb_ereg* เลยจะสั่ง docker-php-ext-configure mbstring --disable-mbregex ก่อน install เพื่อข้ามไลบรารีนี้ก็ได้

ถ้าใช้ image ที่คนอื่นทำต่อจาก image ทางการ เช่น image สำหรับ Laravel ที่มีคนดูแล ก็ดูว่าเขารองรับ 8.6 แล้วหรือยัง ทีม docker-library เองก็ยอมรับว่ายังมี image ปลายทางอีกหลายตัวที่ต้องคิดเรื่องนี้ต่อ

คำสั่ง PECL ที่ใช้บ่อยเทียบกับ PIE

PECL PIE
pecl install xdebug pie install xdebug/xdebug
pecl upgrade-all pie upgrade
pecl list pie show
pecl search redis pie search redis

ต่างกันตรงที่ PIE ใช้ชื่อ package แบบ Composer ไม่ใช่ชื่อ extension เปล่า ๆ หาชื่อได้ที่ packagist.org/extensions และ PIE ต้องการ PHP 8.1 ขึ้นไปถ้ารันเป็น PHAR ถ้าเครื่องยังเป็น PHP เก่ากว่านั้น มีตัว executable ที่รันได้เองโดยไม่พึ่ง PHP ของเครื่อง

เรื่อง flag ที่ CI มักติด เช่น --select ตอนติดตั้งตาม composer.json เขียนไว้แล้วในโพสต์ PIE 1.5 รายละเอียดของข้อถกเถียงใน mailing list อ่านต่อได้ที่บทความต้นฉบับครับ

อ่านต่อ

ล่าสุด

ดูทั้งหมด →