错误90%是未启用或环境错位,须验证三件事:php -m | grep curl、php -i | grep "curl.enabled"、php -r "print_r(curl_version());";若features缺CURL_VERSION_SSL,则HTTPS请求失败。

curl_init() 报错“Call to undefined function”?先别重装
这错误90%不是没装,而是没启用或环境错位。必须立刻验证三件事:php -m | grep curl(是否在已加载模块列表里)、php -i | grep "curl.enabled"(配置项是否为 On)、php -r "print_r(curl_version());"(能否调用并返回数组)。第三条若报错,前两条中必有一项失败;若返回数组但 features 里不含 CURL_VERSION_SSL,HTTPS 请求会直接失败——调微信/支付宝接口时卡住,就是这个原因。
Linux(Debian/Ubuntu)下用 apt 安装,版本号一个数字都不能错
php-env 不是独立发行版,它复用系统 PHP 包管理机制。执行前先确认 PHP 小版本:php -v 输出如 PHP 8.3.12,就必须装 php8.3-curl,而不是 php-curl(旧包名,新版已弃用)。
sudo apt update && sudo apt install php8.3-curl- 扩展配置通常自动写入
/etc/php/8.3/cli/conf.d/20-curl.ini和fpm/conf.d/下,内容就是extension=curl - CLI 模式不用重启,但建议清 OPcache:
php -r "opcache_reset();" - FPM 必须重启:
sudo systemctl restart php8.3-fpm
Windows(phpEnv)启用 curl,别碰 system32
把 libeay32.dll、ssleay32.dll 往 %windir%\system32 里扔,是 Win10/11 后极易引发 DLL Hell 的危险操作。phpEnv 的路径结构清晰,只做三件事即可:
- 运行
php --ini确认当前生效的php.ini路径 - 打开该文件,取消
;extension=curl前的分号(注意:phpEnv 默认用的是curl,不是php_curl.dll) - 检查
extension_dir是否指向真实扩展目录,例如"D:\phpEnv\php\ext",并确认该目录下存在php_curl.dll
改完后必须重启 phpEnv 控制面板里的 Apache 或 Nginx 服务,不能只刷新页面。
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
立即学习“PHP免费学习笔记(深入)”;
curl_version()['features'] 缺 SSL 支持?不是配置问题,是 OpenSSL 绑定断了
即使 curl_init() 能跑,curl_version() 返回的 features 若不带 CURL_VERSION_SSL,所有 HTTPS 请求都会拒绝连接。这不是 php.ini 配置能解决的,而是 libcurl 编译时没链接 OpenSSL。
- Linux:确认系统已装
libssl-dev(Debian/Ubuntu)或openssl-devel(CentOS/RHEL),再重装php8.3-curl - Windows(phpEnv):检查 PHP 目录下是否存在
libeay32.dll和ssleay32.dll,且与php_curl.dll是同一构建批次;不同来源混用会导致 SSL 功能静默失效
最隐蔽的坑在于:CLI 和 Web 环境可能加载不同的 php.ini,导致 php -m 显示已加载,但浏览器里 phpinfo() 找不到 curl ——务必用 php --ini 和 phpinfo() 双验证。


















