PHP 7.4 的 curl 扩展默认不自动启用,但预编译包多已内置支持;关键在于匹配依赖(如 OpenSSL DLL 或 libcurl-dev)并正确加载:phpenv 编译内置,验证用 function_exists('curl_init');Windows 环境需取消 php.ini 中 extension=curl 注释并确保 OpenSSL 1.1.x DLL 可见;Linux 需单独安装 php7.4-curl 包并重启对应服务。
PHP 7.4 的curl扩展默认不自动启用,但绝大多数预编译二进制包(如phpenv、phpStudy、phpEnv、XAMPP)已内置支持——关键不是“装”,而是“连上依赖”和“让 PHP 加载它”。
确认你用的是哪个 PHP 7.4 环境
不同环境的配置路径、加载机制、依赖方式完全不同,不能套用同一套操作:
phpenv:curl 是编译时内置模块,
返回
即可用,
必然为空
phpEnv / phpStudy / XAMPP(Windows):依赖
+ OpenSSL DLL(如
),必须在
中取消
注释,并确保
指向含该 DLL 的目录
Linux(apt/dnf 安装):需单独安装
包,不是改
就能解决
Windows 下 php_curl.dll 报错“Unable to initialize curl”的真实原因
这不是扩展没加载,而是底层 SSL 库缺失或版本错配。PHP 7.4+ 已弃用
/
,改用 OpenSSL 1.1.x 或 3.x:
检查 PHP 安装目录(如
)下是否存在
和
若用 Apache,需在
中显式加载它们:
若用 Nginx + PHP-FPM,把这两个 DLL 复制到
同级目录,或系统
可达路径(如
)
别碰
—— 它只在启用了 SSH 支持时才需要,普通 HTTP/HTTPS 请求不依赖它
Linux 下装完
php7
.4-curl 仍不生效?重点查这三处
包管理器装完只是放好了 so 文件,但 PHP 还不一定认得:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
确认 CLI 和 Web 使用的是同一套配置:
和
页面顶部的
路径必须一致;常见错误是改了 CLI 的
,但 Apache 用的是
检查扩展是否真被加载:
有输出才表示成功;
应显示
重启服务必须对应 SAPI:Apache 用户执行
,PHP-FPM 用户执行
(注意服务名含版本号)
验证 curl 是否真正就绪,别信 phpinfo() 页面
phpinfo() 显示 “cURL support => enabled” 只代表模块注册成功,不代表能发请求。真实可用性必须靠函数调用验证:
终端运行:
—— 有 JSON 输出才算通
若报
,说明扩展根本没加载,不是代码问题,也不是网络问题
若报
,说明 OpenSSL 信任库缺失,需设置
或配置
(Linux 常见于未安装
包)
最常被忽略的点:CLI 和 Web 使用两套
,而 Windows 下的 DLL 依赖路径不满足 Apache 的 DLL 搜索顺序——改完配置不重启服务、不验证函数存在性,等于没做。
php -r "var_dump(function_exists('curl_init'));"bool(true)php -m | grep curlphp_curl.dlllibssl-1_1-x64.dllphp.ini;extension=curlextension_dirphp7.4-curlphp.inissleay32.dlllibeay32.dllC:\php\php-7.4.33\libssl-1_1-x64.dlllibcrypto-1_1-x64.dllhttpd.confLoadFile "C:/php/php-7.4.33/libssl-1_1-x64.dll"
LoadFile "C:/php/php-7.4.33/libcrypto-1_1-x64.dll"php.exePATHC:\Windows\System32libssh2.dllphp --iniphpinfo()Loaded Configuration Filephp.ini/etc/php/7.4/apache2/php.iniphp -m | grep curlphp -i | grep "cURL support"enabledsudo systemctl restart apache2sudo systemctl restart php7.4-fpmphp -r "$ch = curl_init('https://httpbin.org/get'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch); curl_close($ch);"Call to undefined function curl_init()SSL certificate problem: unable to get local issuer certificateCURLOPT_CAINFOopenssl.cafileca-certificatesphp.ini