必须用 composer install:它只读 composer.lock,装的版本和提交时完全一致;刚克隆项目、ci/cd 构建、线上部署等场景必须使用,否则会导致环境不一致甚至线上 500 错误。

能跑通 composer require 并在入口文件第一行写对 require __DIR__ . '/vendor/autoload.php';,你就已经越过 Composer 入门门槛了——剩下的全是协作规范和环境约束问题,不是语法难题。
composer install 和 composer update 到底该用哪个?
这不是“哪个更好用”,而是“在哪种场景下必须用哪一个”。用错一个,轻则本地行为不一致,重则线上 500。
- 刚
git clone别人项目、CI/CD 流水线构建、线上部署 → 必须用composer install:它只读composer.lock,装的版本和提交时完全一致 - 本地开发想加新包(比如
monolog/monolog)→ 用composer require monolog/monolog:它自动触发更新并重写composer.lock - 只想升小版本(如
2.1.3 → 2.1.9)→ 用composer update --with-dependencies;裸跑composer update会重算整个依赖树,可能意外升到3.0.0导致兼容性断裂 - 常见错误:有人
update后直接提交了新的composer.lock,别人install出来却行为异常,但没人意识到是 lock 文件被悄悄改了
vendor/autoload.php 为什么必须放在入口文件第一行?
PHP 的自动加载注册是“一次性”的。一旦某个类名首次被引用时还没定义,就会立即抛出 Fatal error,后续任何 require_once 都救不回来。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 错误写法:
session_start(); echo 'hello'; require 'vendor/autoload.php'; new Monolog\Logger('app');→ 可能报Cannot send session cache limiter或Class 'Monolog\Logger' not found - 必须用绝对路径:
require __DIR__ . '/vendor/autoload.php';,不能写./vendor/autoload.php(CLI 和 Web 下相对路径行为不一致) - 别以为 autoload.php 是“可选的”,自己手写
require_once 'vendor/monolog/monolog/src/Monolog/Logger.php';→ Monolog 内部还依赖其他类,全得手动补,根本走不通
国内网络下 composer install 卡在 “Loading composer repositories” 怎么办?
这不是你网络断了,也不是 Composer 坏了,是直连 https://packagist.org 被墙导致的典型超时现象。
- 第一步先跑
composer diagnose:它检查 DNS、HTTPS 证书、CA 路径、写权限,比composer --version看数字靠谱得多 - 确认卡点后,直接换镜像源,别折腾代理:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - Windows 用户在 WSL 里操作,千万别把项目放在
/mnt/c/下——IO 性能差,composer install容易假死或报failed to extract - 如果
command not found,说明 PATH 没配对,不是 Composer 坏了;临时救急用php composer.phar --version测试,确认是路径问题再修环境
老项目没命名空间,怎么接入 Composer 自动加载?
别硬套 PSR-4,也别一上来就重构全部代码——先让现有逻辑跑起来才是关键。
- 改
composer.json的autoload字段为"classmap": ["lib/", "includes/"],把老代码目录列进去 - 然后执行
composer dump-autoload,它会扫描这些目录,生成类名到文件路径的映射表 - 不用改任何已有
require或函数调用,new MyClass()就能直接用 - 如果改了 autoload 配置但没跑
dump-autoload,那改了等于白改,类还是找不到
真正容易被忽略的点不在命令本身,而在路径、时机和协作契约:入口文件第一行的 __DIR__、composer.lock 是否被无意提交、镜像源是否全局生效——这些细节不出错,Composer 才算真正“可用”。










