呼叫 curl_init() 出現 Call to undefined function 錯誤,代表 PHP 未載入 cURL 擴充。本文提供 Windows (XAMPP/WAMP/IIS) 與 Linux (apt/yum/docker) 環境的完整啟用流程、驗證腳本與常見坑點排查。
<?php
// test_curl.php
if (!function_exists('curl_init')) {
die('❌ cURL 擴充未載入');
}
$ch = curl_init('https://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$html = curl_exec($ch);
if ($html === false) {
die('❌ 請求失敗:' . curl_error($ch));
}
curl_close($ch);
echo '✅ cURL 正常運作,取得 ' . strlen($html) . ' 字元';
?>
php.ini(位置執行 php --ini 或 phpinfo() 確認):
; 找到並取消註解
extension=curl
php_curl.dll(PHP ext 目錄)libeay32.dll、ssleay32.dll(PHP 根目錄)C:\Windows\System32\ 或 Apache bin\ 目錄php_curl → 自動重啟。curl。# PHP 8.x
sudo apt update && sudo apt install php8.3-curl
# PHP 7.4
sudo apt install php7.4-curl
# 重啟服務
sudo systemctl restart php8.3-fpm # 或 apache2 / nginx
# EPEL 源通常已含
sudo dnf install php-curl # 或 yum
sudo systemctl restart php-fpm
# Dockerfile
FROM php:8.3-fpm
RUN docker-php-ext-install curl
# 或安裝依賴後編譯
RUN apt-get update && apt-get install -y libcurl4-openssl-dev \
&& docker-php-ext-install curl
| 錯誤現象 | 根因 | 解決方案 |
|---|---|---|
Windows: Unable to load dynamic library 'curl' | DLL 相依遺失 | 確認 libeay32.dll/ssleay32.dll 存在於 PATH 路徑 |
Linux: undefined symbol: curl_global_init | libcurl 版本不匹配 | 重新編譯 docker-php-ext-install curl 或重裝 php-curl 套件 |
| 啟用後仍報未定義 | 編輯錯誤的 php.ini | 執行 php --ini 確認 Loaded Configuration File |
| CLI 正常但 FPM 失效 | 不同 SAPI 使用不同 ini | 分別檢查 /etc/php/8.3/cli/php.ini 與 /etc/php/8.3/fpm/php.ini |
<?php
if (function_exists('curl_version')) {
$info = curl_version();
echo '版本: ' . $info['version'] . "\n";
echo 'SSL: ' . ($info['features'] & CURL_VERSION_SSL ? '支援' : '不支援') . "\n";
echo '支援協定: ' . implode(', ', $info['protocols']) . "\n";
echo 'libz: ' . ($info['features'] & CURL_VERSION_LIBZ ? '是' : '否') . "\n";
}
?>
CURLOPT_SSL_VERIFYPEER => true,配合 CURLOPT_CAINFO 指定最新 CA 憑證包(cacert.pem)。ca-certificates 套件。CURLOPT_PROTOCOLS 限制 HTTPS)。完成上述步驟後,PHP 即可完整支援 cURL 進行 HTTP/HTTPS 請求、API 串接、檔案上傳下載等核心網路操作。