核心原理:include_path
PHP 尋找 `require/include` 檔案順序:
- 腳本所在目錄 (相對路徑時)。
- `include_path` 內目錄 (由左至右)。
PEAR 安裝本質 = **將 PEAR 目錄加入 `include_path`**。
三種配置方式
1. php.ini 全域 (永久、需重啟 PHP-FPM/Apache)
; Linux
include_path = ".:/usr/share/php:/usr/local/lib/php"
; Windows
include_path = ".;C:\php\pear;C:\php\includes"
2. 執行期動態修改 (跨專案隔離、無需重啟)
<?php
// 專案啟動檔 (如 bootstrap.php) 最頂部
set_include_path(
'/path/to/project/pear' . PATH_SEPARATOR .
'/path/to/shared/pear' . PATH_SEPARATOR .
get_include_path()
);
3. .htaccess / .user.ini (單目錄、共享主機適用)
# .htaccess (Apache + mod_php)
php_value include_path ".:/home/user/pear:/usr/share/php"
# .user.ini (PHP-FPM / CGI)
include_path = ".:/home/user/pear:/usr/share/php"
安裝 PEAR 套件管理器
Linux (系統包管理器)
apt update && apt install php-pear # Debian/Ubuntu
yum install php-pear # CentOS/RHEL
dnf install php-pear # Fedora
Windows / 通用 (go-pear.phar)
- 下載 go-pear.phar。
- `php go-pear.phar` → 依提示選擇安裝目錄 (建議 `C:\php\pear`)。
- 安裝完成會生成 `pear.bat` / `pear`,加入系統 PATH。
驗證安裝
pear version
pear config-show
pear list
PEAR 與 Composer 共存策略
| 場景 | 建議 |
| 新專案 | **純 Composer**,PEAR 套件多已發布至 Packagist (`pear/package_name`)。 |
| 舊專案維護 | 保留 PEAR `include_path`,**Composer 自動載入器優先** (放在 `include_path` 最前或 `require 'vendor/autoload.php'`)。 |
| 需用 PEAR 套件管理器安裝系統級工具 | `pear install PHP_CodeSniffer` 等 CLI 工具,與專案無關。 |
常見問題排查
- `Class 'PEAR' not found` → `include_path` 未包含 PEAR 目錄,或大小寫不符 (Linux 區分大小寫)。
- `pear install` 失敗 `No releases available` → `pear channel-update pear.php.net` 更新頻道。
- 權限錯誤 → `cache_dir`/`download_dir`/`temp_dir` 需寫入權限 (`pear config-set cache_dir /tmp/pear-cache`)。
- 版本衝突 → `pear install -f Package-Version` 強制指定版本,或改用 Composer 精確鎖定。
快速測試腳本
<?php
// test_pear.php
require_once 'PEAR.php';
require_once 'Net/DNS2.php'; // 需先 pear install Net_DNS2
echo "PEAR base class loaded: " . class_exists('PEAR') . "\n";
echo "Net_DNS2 loaded: " . class_exists('Net_DNS2') . "\n";
$resolver = new Net_DNS2_Resolver();
$result = $resolver->query('google.com', 'A');
foreach ($result->answer as $rr) echo $rr->rdata . "\n";
- 上一篇文章: PEAR Cache_Lite 實戰教學:頁面片段快取、標籤群組失效、生命周期控制
- 下一篇文章: PEAR Auth_HTTP 實作 HTTP Basic/Digest 認證:資料庫驅動、自定義 Realm、取消提示
Copyright ©
程式碼之家 All Rights Reserved