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 อ่านต่อได้ที่บทความต้นฉบับครับ






