Laravel 10 安装失败八成因 PHP 扩展缺失,强制必需扩展包括 ctype、curl、dom、fileinfo、filter、hash、mbstring、openssl、pdo、tokenizer、xml,缺一即导致 composer create-project 中断或启动报错。

Laravel 10 安装失败,八成是缺 PHP 扩展——不是“可能缺”,而是“必须全齐”,少一个 composer create-project 就会直接报错退出。
哪些扩展是硬性门槛(Laravel 10 启动即崩)
这些扩展一旦缺失,composer install 阶段就会中断,或 php artisan serve 启动时报 Class 'Illuminate\Foundation\Application' not found 类似致命错误:
-
ctype:Laravel 自动加载器依赖字符类型判断 -
curl:Artisan 命令、通知、队列驱动、包更新都调用它 -
dom:Blade 编译、XML 配置解析、测试中 DOM 断言必需 -
fileinfo:文件上传验证(mime_types规则)、资源发布检测 -
filter:请求输入过滤(validate中的email、int等规则底层依赖) -
hash:密码哈希(Hash::make())、会话签名、API token 签发 -
mbstring:多字节字符串截取、URL 生成、Blade 模板中中文处理 -
openssl:HTTPS 请求、JWT、加密配置、Session 加密存储 -
pdo:所有数据库连接的基础抽象层(哪怕你只用 SQLite) -
tokenizer:路由缓存(php artisan route:cache)、配置缓存核心依赖 -
xml:日志 XML 输出、部分第三方包(如 SOAP、RSS)解析
哪些扩展不装也能跑,但一用就报错(项目实际开发绕不开)
它们不在 Laravel 核心启动链路上,但只要你写业务代码,很快就会触发报错:
-
bcmath:金额计算(number_format精度丢失时必用)、队列重试间隔计算 -
json:API 响应(response()->json())、配置文件解析、Redis 序列化 -
intl:日期本地化(Carbon::now()->locale('zh')->diffForHumans())、货币格式(NumberFormatter) -
gd或imagick:图片上传后缩略图、水印(Intervention Image包强依赖) -
redis:缓存驱动、会话驱动、队列驱动(QUEUE_CONNECTION=redis)
检查和补漏最省事的方法
别靠人眼数 php -m 输出。直接运行这个命令,一次性筛出所有关键项:
立即学习“PHP免费学习笔记(深入)”;
php -m | grep -E '^(ctype|curl|dom|fileinfo|filter|hash|mbstring|openssl|pdo|tokenizer|xml|bcmath|json|intl|gd|redis)$'
如果某行没输出,说明对应扩展未启用。常见补救方式:
- Ubuntu/Debian:
sudo apt install php8.1-xxx(把xxx换成扩展名,如php8.1-bcmath) - CentOS/RHEL:
sudo yum install php-xxx(如php-intl),注意 PHP 版本需匹配(php -v查看) - 编译安装的 PHP:
cd /path/to/php-src/ext/xxx && /usr/local/bin/phpize && ./configure && make && sudo make install,然后在php.ini加extension=xxx.so - 改完
php.ini后,别忘了重启php-fpm或 Web 服务(sudo systemctl restart php8.1-fpm)
最容易被忽略的是 fileinfo 和 tokenizer:前者常被当成“可选”,其实文件上传验证默认启用;后者看似冷门,但关掉它,php artisan config:cache 直接失败——而生产环境几乎必跑这条命令。



















