初學 PHP 時聽過 PEAR/PECL,卻常搞混。隨著 Composer 成為事實標準,它們的角色發生劇變。本文從歷史定位、架構差異、安裝機制、現代替代方案四個維度,徹底釐清兩者本質與現狀。
| 維度 | PEAR (PHP Extension and Application Repository) | PECL (PHP Extension Community Library) |
|---|---|---|
| 全稱 | PHP Extension and Application Repository | PHP Extension Community Library |
| 代碼語言 | 純 PHP | C/C++ (需編譯為 .so/.dll) |
| 安裝產物 | .php 文件 (類庫、組件、應用) | PHP 擴展模塊 (extension=xxx.so) |
| 安裝工具 | pear install Package_Name | pecl install extname |
| 部署位置 | include_path 目錄 (如 /usr/share/php) | PHP 擴展目錄 (extension_dir) |
| 依賴管理 | 通道、套件 XML、版本約束 | PHP 版本、Zend API 版本、庫依賴 (libxml, openssl...) |
| 典型代表 | PEAR::DB, PEAR::Mail, HTTP_Request, PHPUnit (早期) | redis, mongodb, swoole, xdebug, imagick, grpc, protobuf |
| 質量門檻 | 社區審核、QA、文檔規範 (PEAR Coding Standards) | 同 PEAR,但更側重 C 級穩定性、內存安全 |
# 1. 系統包管理器 (推薦:版本鎖定、安全更新、依賴自動解決)
# Ubuntu/Debian
apt-get update && apt-get install -y php-redis php-swoole php-mongodb
# RHEL/CentOS/Rocky
dnf install -y php-pecl-redis php-pecl-swoole php-pecl-mongodb
# Alpine (Docker)
apk add --no-cache php-pecl-redis php-pecl-swoole php-pecl-mongodb
# 2. pecl 命令 (需安裝 php-pear/php-dev + 編譯工具鏈)
pecl install redis swoole mongodb
# 會提示啟用配置:echo "extension=redis.so" > /etc/php/8.x/mods-available/redis.ini
# phpenmod redis
# 3. Dockerfile 最佳實踐 (多階段構建)
FROM php:8.2-fpm AS builder
RUN apt-get update && apt-get install -y libssl-dev libcurl4-openssl-dev \
&& pecl install redis-5.3.7 swoole-5.0.3 \
&& docker-php-ext-enable redis swoole
FROM php:8.2-fpm
COPY --from=builder /usr/local/lib/php/extensions /usr/local/lib/php/extensions
COPY --from=builder /usr/local/etc/php/conf.d/docker-php-ext-*.ini /usr/local/etc/php/conf.d/
# 忘掉 pear install,直接用 Composer composer require guzzlehttp/guzzle symfony/mailer twig/twig webmozart/assert # composer.json 自動記錄依賴,團隊統一 composer install
# 1. 將 pear 包轉為 composer 依賴 (大多已在 Packagist 有對應 fork)
composer require pear/http_request2 pear/mail_mime
# 2. 若極少數無對應包,可用 composer 安裝 pear 通道包
composer require --repository='{"type":"pear","url":"https://pear.php.net"}' pear/Net_DNS2
# 3. 完全切斷 pear 命令依賴,刪除 /usr/bin/pear
┌─────────────────────────────────────────────────────────────┐ │ PHP 依賴管理全景 │ ├──────────────────────┬──────────────────────────────────────┤ │ 純 PHP 庫/組件/框架 │ Composer (Packagist) │ │ (業務邏輯、工具、SDK)│ → composer require vendor/pkg │ ├──────────────────────┼──────────────────────────────────────┤ │ C/C++ 性能擴展 │ PECL / 系統包管理器 / 官方預編譯 DLL │ │ (Redis、Swoole、 │ → apt/dnf/brew install php-pecl-xxx │ │ ImageMagick、gRPC) │ → pecl install xxx (需編譯環境) │ │ │ → docker-php-ext-install xxx │ ├──────────────────────┼──────────────────────────────────────┤ │ 核心內建擴展 │ PHP 內核編譯時啟用 (--with-xxx) │ │ (PDO、JSON、MBString)│ 或 docker-php-ext-install pdo_mysql │ └──────────────────────┴──────────────────────────────────────┘
PEAR 奠基了 PHP 組件化標準,PECL 支撐著 PHP 性能天花板。**現代工作流:純 PHP 用 Composer,C 擴展用系統包/PECL/Docker,兩條線互不干擾,各司其職。** 理解這層架構邊界,才能在技術選型、CI/CD 構建、故障排查中遊刃有餘。