PEAR 作為 PHP 早期標準化組件庫,雖然包管理地位讓位於 Composer,但其核心庫(DB、MDB2、HTML_QuickForm、Mail、XML_Serializer 等)在維護舊系統、快速原型、系統級工具開發中仍具不可替代價值。本文詳述 Windows/Linux 下 PEAR 環境部署、命令行管理、核心庫分類與 HTML_QuickForm 表單快速開發實戰。
D:\php),雙擊運行 go-pear.bat。php.ini 的 include_path。pear version 顯示版本號即成功。pear 命令不可用,將 PHP 目錄加入系統 PATH 環境變量。# Debian/Ubuntu
sudo apt-get install php-pear
# CentOS/RHEL
sudo yum install php-pear
# macOS (Homebrew)
brew install php@8.2 # 內建 pear
# 或單獨安裝
php /usr/lib/php/install-pear-nozlib.phar
; php.ini
; Windows
include_path = ".;D:\php\includes;D:\php\PEAR"
; Linux/macOS
include_path = ".:/usr/share/php:/usr/local/lib/php/pear"
; 重啟 Web 服務 / php-fpm 生效
| 操作 | 命令 | 說明 |
|---|---|---|
| 安裝套件 | pear install Package_Name | 自動解析依賴,如 pear install DB |
| 僅下載不安裝 | pear download Package_Name | 離線安裝、審核代碼用 |
| 列出遠端所有套件 | pear remote-list | 配合 grep 篩選:pear remote-list | grep -i template |
| 列出已安裝套件 | pear list | 顯示版本、狀態 |
| 檢查可升級套件 | pear list-upgrades | 定期執行保持安全 |
| 升級指定/所有套件 | pear upgrade Package_Name / pear upgrade-all | 生產環境建議指定升級 |
| 移除套件 | pear uninstall Package_Name | 不會刪除依賴的其他套件 |
| 搜尋套件 | pear search keyword | 如 pear search xml |
| 查看套件信息 | pear info Package_Name | 版本、依賴、許可證、描述 |
| 執行套件測試 | pear run-tests | 在套件目錄下執行 |
| 打包發布 | pear package | 生成 .tgz 上傳至 pear.php.net |
| 領域 | 代表套件 | 核心能力 | 現代替代者 |
|---|---|---|---|
| 資料庫抽象 | DB, MDB2 | 統一 API 支援 MySQL/PostgreSQL/SQLite/Oracle,預處理、事務、結果集遍歷 | PDO, Doctrine DBAL |
| 表單構建/驗證 | HTML_QuickForm, HTML_QuickForm2 | 物件導向定義表單、服務端/客戶端驗證、多種渲染器、插件擴展 | Symfony Form, Laravel Collective |
| 模板引擎 | HTML_Template_IT, HTML_Template_Sigma | 區塊巢狀、變量替換、緩存編譯、過濾器鏈 | Twig, Blade, Latte |
| 郵件發送 | Mail, Mail_Mime, Mail_Queue | SMTP/送信/郵件隊列、附件、HTML/純文本替代、編碼處理 | Symfony Mailer, PHPMailer |
| XML 處理 | XML_Parser, XML_Serializer, XML_RPC2 | SAX/DOM 解析、陣列/對象雙向序列化、XML-RPC 客戶端/服務端 | SimpleXML, DOM, Symfony Serializer |
| 快取 | Cache_Lite, Cache | 文件/記憶體/資料庫後端、分組、標籤、自動清理、併發鎖 | PSR-16/PSR-6 實現 (Symfony Cache, laminas-cache) |
| HTTP 客戶端 | HTTP_Request2 | 流畅介面、並發請求、認證、代理、Cookie 罐、響應解析 | Guzzle, Symfony HttpClient |
| 日誌記錄 | Log | 多處理器(文件、Syslog、郵件、資料庫)、優先級、格式化器 | Monolog (PSR-3) |
| 配置管理 | Config | 解析 XML/INI/JSON/PHP/Apache 配置、統一訪問介面、寫入支援 | Symfony Config, vlucas/phpdotenv |
| 單元測試 | PHPUnit (早期 PEAR 版本) | 斷言、數據提供者、模擬對象、代碼覆蓋率 | PHPUnit (Composer/Phar 版) |
pear install HTML_QuickForm
# 若需 HTML_QuickForm2 (PHP5.2+)
pear install HTML_QuickForm2
<?php
require_once 'HTML/QuickForm.php';
// 1. 實例化表單對象
$form = new HTML_QuickForm('loginForm', 'post', $_SERVER['PHP_SELF']);
// 2. 添加頁首標題組
$form->addElement('header', null, '會員登錄系統');
// 3. 添加輸入字段(自動生成 label、id)
$form->addElement('text', 'username', '用戶名:', ['size' => 20, 'maxlength' => 50]);
$form->addElement('password', 'password', '密碼:', ['size' => 20, 'maxlength' => 50]);
// 4. 添加驗證規則(服務端 + 客戶端 JS 同步生成)
$form->addRule('username', '用戶名不能為空', 'required');
$form->addRule('username', '用戶名長度 3-20 字符', 'rangelength', [3, 20]);
$form->addRule('password', '密碼不能為空', 'required');
$form->addRule('password', '密碼長度 6-30 字符', 'rangelength', [6, 30]);
// 5. 添加提交按鈕
$form->addElement('submit', 'submit', '登錄');
// 6. 處理提交
if ($form->validate()) {
$values = $form->getSubmitValues();
// 業務邏輯:驗證用戶、設置 Session、重定向...
echo "<div class='success'>歡迎回來, {$values['username']}!</div>";
// 實際項目中應 header('Location: dashboard.php'); exit;
}
// 7. 渲染輸出(預設表格佈局,可替換渲染器)
$form->display();
?>
require_once 'HTML/QuickForm/Renderer/Array.php';
$renderer = new HTML_QuickForm_Renderer_Array();
$form->accept($renderer);
$formData = $renderer->toArray();
// 在模板中遍歷 $formData 生成任意 HTML 結構
// 如: <div class="mb-3"><label class="form-label">{label}</label>{element}<div class="text-danger">{error}</div></div>
$form->getValidationScript() 生成對應 JS,服務端/客戶端規則**單一來源**。$form->freeze() 將表單轉為只讀顯示(詳情頁復用同一定義)。pear install HTML_QuickForm-3.2.16 避免非預期升級破壞相容性。Log 類)。composer require pear/html_quickform2 (官方映射包) 統一依賴管理。pear run-tests 確保升級不破壞業務邏輯。PEAR 或許不再是主流包管理器,但其留下的**工程化基因**——標準化結構、嚴格測試、文檔優先、向後相容——依然值得每位 PHP 開發者學習。掌握 PEAR 核心庫,能在維護舊系統、快速構建內部工具、受限環境(無 Composer/網絡)時成為你的「秘密武器」。