白屏主因是PHP运行时崩溃而非Composer装包失败;应先查PHP错误日志、确认autoload.php是否引入、检查autoload_psr4.php映射是否正确、验证扩展是否缺失及配置是否生效。

白屏不是 Composer 装包失败,而是装包成功后 PHP 运行时崩了——90% 的情况是类加载失效、扩展缺失或配置未生效,不是重装 vendor 就能解决的。
Class not found 却明确已装包?先查 autoload_psr4.php
装完包却报 Class 'AppHttpControllersHomeController' not found,别急着删 vendor。Composer 不会自动把新包的命名空间写进自动加载文件,除非你触发了 dump-autoload。
- 运行
composer dump-autoload -o强制重建优化版映射(-o很关键,否则 PSR-4 映射可能不生效) - 打开
vendor/composer/autoload_psr4.php,搜索你的类名前缀(如'App\'),确认路径映射是否拼对——末尾多一个斜杠("App\": "app//")或少一个("App\": "app")都会失效 - 检查
composer.json里autoload段是否被注释、缩进错位,或用了 Windows 风格换行导致 JSON 解析失败(composer diagnose会直接报Reading ./composer.json failed)
页面空白但无错误提示?开 display_errors 或看 PHP 错误日志
白屏常因 PHP 致命错误被静默吞掉,比如扩展没装、函数被禁用、内存超限。它和 Composer 报错是两层问题。
- 临时在入口文件(如
public/index.php)顶部加:ini_set('display_errors', '1'); error_reporting(E_ALL); - 更可靠的是查 PHP 错误日志:运行
php --ini找到加载的php.ini,再查error_log配置项指向哪(常见路径:/var/log/php_errors.log或~/Library/Logs/php/error_log) - 重点盯这些错误:
Call to undefined function openssl_encrypt()(缺 ext-openssl)、Undefined constant CURLOPT_SSL_VERIFYPEER(cURL 扩展根本没加载)、Allowed memory size exhausted(Composer 自动加载类太多,需composer dump-autoload -o降体积)
composer install 成功但白屏,重点查 vendor/autoload.php 是否被正确引入
很多项目在 index.php 里 require vendor/autoload.php,但路径写死或环境变量干扰会导致引入失败——此时连 Composer 自己的错误都报不出来。
- 确认
require __DIR__.'/../vendor/autoload.php';中的相对路径在当前工作目录下真能定位到文件(尤其在 CLI 和 Web Server 启动路径不一致时) - 如果用了 symlink 方式安装(如
composer config --global bin-dir),检查vendor/bin下软链目标是否存在;WSL 用户特别注意:/mnt/c/下的项目无法解析 Linux 软链,必须移到~/projects/原生路径 - 某些部署脚本会把
vendor/移到共享目录外,但忘记同步更新autoload.php的路径引用,此时var_dump(file_exists(__DIR__.'/../vendor/autoload.php'));一眼见分晓
升级依赖后白屏,快速定位是哪个包破坏了兼容性
不是所有白屏都来自新装包——可能是旧包升级后删了方法、改了返回类型,而你的代码还直调它。
- 运行
composer show --tree your/project-name,找到报错类所属的包,记下它的版本号(比如guzzlehttp/guzzle v7.8.1) - 对比升级前后
composer.lock,用git diff HEAD~1 composer.lock搜该包名,看version和source.reference是否变了(commit hash 变了说明代码真不同) - 临时验证:在出问题的代码前加
var_dump(method_exists(SomeClass::class, 'brokenMethod'));,排除 autoloader 缓存干扰;如果返回false,再去 GitHub 查那个包的 CHANGELOG 或 diff 两个 tag 的源码
白屏最麻烦的点在于它没有明确错误关键词,容易让人陷入“重装—试运行—再白屏”的循环。真正要盯住的,永远是 PHP 错误日志里的第一行致命错误,而不是 Composer 的安装日志。


















