必须先配置国内镜像源,否则composer init会卡在元数据拉取阶段;需确保php启用openssl、mbstring、zip、curl、fileinfo五扩展,用curl安装最新版composer,再执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/生效。

Composer 在 CentOS 上初始化项目前,必须先确保它能连上国内镜像源——否则 composer init 会卡在包元数据拉取阶段,甚至直接超时失败。这不是“可选优化”,而是初始化成功的前提条件。
确认 PHP 环境是否满足 Composer 运行要求
Composer 不只是看 php -v 版本号,它依赖五个扩展:openssl、mbstring、zip、curl、fileinfo。缺任何一个,composer init 可能中途报错 “Class 'ZipArchive' not found” 或 “cURL error 7”。
- 运行
php -m | grep -E "openssl|mbstring|zip|curl|fileinfo",输出应包含全部五项 - 若缺失,CentOS 7/8 常用命令是:
yum install -y php-cli php-mbstring php-zip php-curl php-openssl php-fileinfo unzip - 装完不用重启 Web 服务(如 Apache/Nginx),但 CLI 下需验证:
php -r "echo extension_loaded('curl') ? 'ok' : 'fail';"逐个测
安装 Composer 并设为全局命令
别用 yum install composer——CentOS 官方源里的版本老旧(常为 1.x),且不支持现代 PHP 8+ 的 autoload 规则,composer init 可能生成错误的 autoload 配置。
- 进临时目录:
cd /tmp - 下载并校验安装脚本:
curl -sS https://getcomposer.org/installer -o composer-setup.php,然后用官网最新 SHA-384 值校验(去 https://www.php.cn/link/594ca739e3609243a6b6a3dd8d871114 查) - 执行安装:
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 补权限:
sudo chmod +x /usr/local/bin/composer - 验证:
composer --version应输出类似Composer version 2.7.6
切换到阿里云或腾讯云镜像源(必须做)
默认源 https://repo.packagist.org 在国内直连极慢,composer init 会卡在 “Loading composer repositories” 或报 Connection timed out。全局配置镜像源是初始化前的硬性步骤。
- 执行:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 或用腾讯源:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 验证是否生效:
composer config -g repo.packagist应返回你刚设置的 URL - 注意:不要手动编辑
/usr/local/bin/composer文件——那是二进制可执行文件,不是配置文件;正确配置位置是用户级~/.composer/config.json
执行 composer init 并注意交互陷阱
composer init 是交互式命令,看似简单,但几个选项填错会导致后续 require 或 autoload 失效。
- 进入项目目录后运行:
composer init -
Package name:建议用小写字母+短横线格式,如myapp/api-client,避免空格或大写 -
License:直接回车默认MIT即可,别输错格式(如写成mit或MIT License可能影响 packagist 发布) -
Autoloading:选PSR-4,然后填命名空间(如App\)和路径(如src/),路径必须真实存在且末尾带斜杠 - 最后确认生成
composer.json前,务必检查require和autoload段是否符合预期——这里出错,后面require包时可能找不到类
最容易被忽略的是:PHP CLI 和 Web 服务器用的 php.ini 往往不同,composer init 走的是 CLI 配置,但你后续测试时可能跑在 Apache/Nginx 下——务必确认两者都启用了相同扩展,否则 vendor/autoload.php 在 Web 环境里会直接报错。











