首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP cURL 擴展安裝與啟用完整指南:Windows/Linux/macOS 全平台排錯

     編輯:PHP 相關知識

現象

呼叫 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

Windows (XAMPP / WAMP / 手動 PHP)

  1. 打開 php.ini(透過 php --ini 或 phpinfo() 確認路徑)
  2. 搜尋 ;extension=curl,移除前分號 → extension=curl
  3. 關鍵步驟: 將 PHP 目錄下的 libssh2.dll、libcrypto-*.dll、libssl-*.dll 複製到 Apache 的 bin 目錄(或系統 PATH 目錄)
    原因: PHP 8.1+ cURL 依賴 OpenSSL 庫,Apache 載入 PHP 時需找到這些 DLL。
  4. 重啟 Apache / PHP-FPM
  5. 驗證:php -m | findstr curl 或瀏覽 phpinfo()

Linux (Ubuntu / Debian)

# 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 確認)。

Linux (CentOS / RHEL / AlmaLinux / Rocky)

# 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

macOS (Homebrew)

brew install php@8.2
# 或已安裝 PHP
brew install php@8.2 --with-curl  # 舊版參數
# 新版 Homebrew PHP 預設已包含 curl
brew services restart php@8.2

Docker / 容器環境

# 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 / Apachesystemctl 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」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved