php -m无curl输出即确认未启用,与网络或权限无关;需通过php --ini定位CLI配置文件,Linux用apt install phpX.Y-curl并phpenmod,Windows改对应CLI的php.ini取消;extension=curl注释,Docker/Homebrew需额外启用。

php -m 里没 curl 就是没启用,不是网络或权限问题
Composer 报 The requested PHP extension curl is missing,说明它根本没在 PHP CLI 环境里看到 curl 扩展 —— 和你能不能访问 GitHub、有没有 sudo 权限完全无关。核心判断只有一条:php -m | grep curl 没输出,就坐实缺失。
注意:Web 页面上 phpinfo() 显示 curl 已加载,不代表 CLI 也行。Composer 只认 php --ini 输出的 “Loaded Configuration File” 对应的那个 php.ini。
Linux 下别手动改 php.ini,用 apt + phpenmod 更稳
Ubuntu/Debian 用户最常踩的坑是:查到 PHP 版本是 8.2,却装了 php-curl(不带版本号),结果系统装的是 8.1 的扩展,CLI 还是找不到。
- 先确认版本:
php -v(比如输出PHP 8.2.15) - 装对应包:
sudo apt install php8.2-curl - 启用(旧系统可能需要):
sudo phpenmod curl - 验证:
php -m | grep curl应直接输出curl
装完后检查 php --ini 输出的 “Scan for additional .ini files in” 路径下是否有 20-curl.ini,没有就说明包没生效。
立即学习“PHP免费学习笔记(深入)”;
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
Windows 下改错 php.ini 是高频失败原因
XAMPP/WAMP 用户有两套 php.ini:Apache 用 \xampp\apache\bin\php.ini,而 Composer 用的是 CLI 的 \xampp\php\php.ini。改错文件等于白干。
- 运行
php --ini,盯住 “Loaded Configuration File” 那一行路径 - 用记事本或 VS Code 打开它,搜索
;extension=curl或;extension=php_curl.dll,删掉前面的分号 - 确认
extension_dir指向正确,比如extension_dir = "ext",且php\ext\php_curl.dll文件真实存在 - 关掉当前命令行窗口,新开一个再试
php -m | grep curl
WAMP 用户更简单:托盘图标 → PHP → PHP extensions → 勾选 php_curl,它会自动处理 ini 和重启。
Docker 或 Homebrew 环境要区分“安装”和“启用”
Homebrew 安装 PHP 后,brew install php@8.2 默认不带 mbstring 或 curl;Docker 的 php:8.2-cli 镜像也默认不启用这些扩展。
- macOS + Homebrew:
brew install php@8.2-curl php@8.2-mbstring,然后检查$(brew --prefix)/etc/php/8.2/conf.d/ext-curl.ini是否存在并启用 - Dockerfile 中不能只写
RUN apt-get install -y php8.2-curl,得补一句RUN docker-php-ext-install curl mbstring—— 否则扩展文件不会被编译进 PHP - 所有环境改完都必须验证:
php -m输出里要有curl,否则 Composer 一定卡住
最容易被忽略的一点:有些扩展(如 dom、simplexml)是 PHP 编译内置的,不提供独立 so/dll,只可能被禁用。它们在 php.ini 里也要显式写 extension=dom 才算启用。


















