curl扩展未启用或未编译,需先确认curl.so是否存在及php-config输出是否含--without-curl,再用对应phpize和php-config在源码ext/curl目录编译安装,并在正确php.ini中添加extension=curl.so后重启php。

宝塔面板里用 phpEnv 管理的 PHP 版本,php -m | grep curl 没输出,说明 curl 扩展确实没启用或压根没编译进去——但大概率是后者:phpEnv 默认编译时禁用了 curl,得手动补上。
确认 curl 扩展真不存在,不是只是没启用
先别急着编译。很多用户误以为是配置问题,其实扩展文件根本没生成:
- 运行
php-config --extension-dir查看扩展存放路径(比如/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/) - 进该目录,执行
ls -l | grep curl—— 如果没curl.so,就是真没编译,跳过「后台勾选」这种无效操作 - 再跑一次
php -i | grep configure,看输出里有没有--without-curl或压根没提--with-curl,这是关键证据
进对源码目录,用对 phpize 和 php-config
phpEnv 的 PHP 是源码编译安装的,扩展也必须用同一套源码树编译,否则 ABI 不匹配,加载直接段错误:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- 找到你当前 PHP 版本对应的源码目录,通常在
/www/server/phpenv/src/php-8.2.15/(版本号按实际替换) - 进入
ext/curl子目录:cd /www/server/phpenv/src/php-8.2.15/ext/curl - 用当前 PHP 的
phpize,不是系统全局的:/www/server/php/82/bin/phpize - configure 时必须指定对应 PHP 的
php-config:./configure --with-php-config=/www/server/php/82/bin/php-config --with-curl - 注意:不要加
--with-curl=/usr这类路径,除非你明确装了非系统 libcurl;多数情况留空即可,让 configure 自动找
编译前确保系统有 curl 开发头文件
configure 阶段报 curl.h: No such file or directory 或 Please reinstall the libcurl distribution,说明缺开发包:
- CentOS/RHEL 8+:
yum install libcurl-devel - Ubuntu/Debian:
apt install libcurl4-openssl-dev - Alpine:
apk add curl-dev - 如果之前装过
curl命令但没装-devel或-dev包,一样会失败
编译安装后必须改对 php.ini 路径
make install 输出的路径(如 Installing shared extensions: /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/)只是目标目录,不等于你 php.ini 里写的 extension_dir:
- 运行
php --ini确认实际生效的php.ini路径(通常是/www/server/php/82/etc/php.ini) - 打开它,检查
extension_dir是否和上面输出路径一致;不一致就改过来,或直接用绝对路径写死 - 在文件末尾添加一行:
extension=curl.so(不能带路径,只写文件名) - 重启 PHP:
service php-fpm-82 restart或在宝塔后台点「重载配置」
最常被忽略的一点:phpEnv 编译的 PHP 往往默认关掉 curl,且不会在 phpinfo() 里显式提示「disabled」,只会安静地不加载。验证是否成功,别只信宝塔界面,一定要跑 php -m | grep curl 和 php -r "var_dump(function_exists('curl_init'));" 双重确认。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










