呼叫 curl_init() 拋出 Call to undefined function curl_init(),表示 PHP 未載入 cURL 擴展。新浪 SDK、支付寶 SDK、微信支付、各類 HTTP 客戶端均強依賴 cURL。
<?php
// 1. 檢查函數是否存在
var_dump(function_exists('curl_init'));
// 2. 檢查模組是否載入
var_dump(extension_loaded('curl'));
// 3. 完整資訊
phpinfo(); // 搜尋 "curl support" → enabled
php.ini(透過 php --ini 或 phpinfo() 確認路徑);extension=curl,移除前分號 → extension=curllibssh2.dll、libcrypto-*.dll、libssl-*.dll 複製到 Apache 的 bin 目錄(或系統 PATH 目錄)php -m | findstr curl 或瀏覽 phpinfo()# PHP 8.2 示例
sudo apt update
sudo apt install php8.2-curl
sudo systemctl restart php8.2-fpm # 或 apache2 / nginx + php-fpm
其他版本將 8.2 替換為實際版本(php -v 確認)。
# EPEL + Remi 源(推薦)
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module enable php:remi-8.2
sudo dnf install php-curl
sudo systemctl restart php-fpm
brew install php@8.2
# 或已安裝 PHP
brew install php@8.2 --with-curl # 舊版參數
# 新版 Homebrew PHP 預設已包含 curl
brew services restart php@8.2
# Dockerfile
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y libcurl4-openssl-dev \
&& docker-php-ext-install curl
# 或使用官方變體
FROM php:8.2-fpm-alpine
RUN apk add --no-cache curl-dev \
&& docker-php-ext-install curl
| 現象 | 原因 | 解決 |
|---|---|---|
| 修改 php.ini 無效 | 編輯錯誤的 php.ini(CLI vs FPM vs Apache 分離) | php --ini 確認 Loaded Configuration File |
| Windows: 重啟後仍報錯 | 缺少 OpenSSL DLL 或版本不匹配 | 複製 libcrypto-*.dll libssl-*.dll 到 Apache bin 目錄 |
| Linux: 安裝後未生效 | 未重啟 PHP-FPM / Apache | systemctl restart php-fpm |
啟用後報 SSL certificate problem | 缺少 CA 憑證包 | sudo apt install ca-certificates / curl.cainfo 指向 cacert.pem |
| 版本衝突 | 多 PHP 版本共存,載入錯誤模組 | 檢查 extension_dir、php -m、容器隔離 |
<?php
// health/curl.php
$ch = curl_init('https://httpbin.org/get');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
CURLOPT_SSL_VERIFYPEER => true,
]);
$ok = curl_exec($ch) !== false;
$err = curl_error($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
header('Content-Type: application/json');
echo json_encode([
'curl_enabled' => extension_loaded('curl'),
'test_ok' => $ok,
'http_code' => $code,
'error' => $err,
]);
cURL 是 PHP 專案的「標配引擎」。Windows 需注意 DLL 依賴鏈,Linux 一條包管理命令搞定,Docker 在構建階段解決。將 extension_loaded('curl') 納入部署檢查清單,避免上線後才發現「找不到 curl_init」。