Laravel安装需确保PHP CLI模式下启用mbstring、openssl、pdo、tokenizer、xml、ctype、json、fileinfo、dom、curl等扩展,运行php --ini确认加载正确php.ini,缺一则vendor/autoload.php无法生成。

安装Laravel时提示缺少PHP扩展,说明Composer在解析依赖或执行初始化脚本时被PHP环境拦截,常见报错如“ext-mbstring is missing”“The fileinfo extension is required”或“The dom extension is required”,这些不是警告而是硬性阻断,不解决就无法生成vendor/autoload.php,项目根本无法启动。
确认当前CLI模式下真实生效的php.ini
Windows用户常改了Apache用的php.ini,却忘了CLI(命令行)走的是另一份配置;Linux/macOS用户可能装了多版本PHP,但php -m查的是默认路径而非CLI实际加载的文件。运行php --ini,紧盯Loaded Configuration File这一行输出——如果显示“(none)”,说明PHP CLI根本没读到任何配置文件,后续所有extension=xxx操作都无效。
若输出为空,需手动创建php.ini:去php.net下载对应PHP版本的php.ini-development,重命名为php.ini并放入php --ini显示的“Configuration File (php.ini) Path”目录中。
逐个启用Laravel必需的核心扩展
Laravel 10+强制要求以下扩展全部启用:mbstring、openssl、pdo、tokenizer、xml、ctype、json、fileinfo、dom、curl。缺一不可,且必须是CLI模式下启用。
立即学习“PHP免费学习笔记(深入)”;
方法一:Linux/macOS一键安装(以PHP 8.2为例)
sudo apt install php8.2-mbstring php8.2-openssl php8.2-pdo php8.2-tokenizer php8.2-xml php8.2-ctype php8.2-json php8.2-fileinfo php8.2-dom php8.2-curl
方法二:Windows手动编辑php.ini
用记事本打开php --ini返回的Loaded Configuration File路径,搜索extension=,取消下列行前的分号:
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=tokenizer
extension=xml
extension=ctype
extension=json
extension=fileinfo
extension=dom
extension=curl
注意:windows下extension=curl要写成extension=php_curl.dll,且必须确保该dll文件真实存在于php/ext/目录中
方法三:验证是否生效
执行php -m | grep -E "(mbstring|fileinfo|dom|curl)"(Linux/macOS)或php -m后肉眼扫一遍(Windows),看到对应模块名才表示成功。如果仍无输出,重启终端再试——某些系统PATH缓存会导致php命令临时指向旧版本。
处理fileinfo等需编译的扩展(LNMP/源码安装场景)
部分LNMP一键包(如军哥LNMP)或自编译PHP未内置fileinfo,即使php.ini里写了extension=fileinfo.so也报错。此时必须手动编译:
第一步:进入PHP源码的ext/fileinfo目录
例如:cd /lnmp1.5/src/php-8.2.10/ext/fileinfo/
第二步:用当前PHP的phpize生成配置/usr/local/php/bin/phpize
第三步:关联当前PHP配置并编译安装./configure --with-php-config=/usr/local/php/bin/php-config && make && make install
成功后会输出类似“Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20220829/”的路径
第四步:在php.ini中添加绝对路径引用extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20220829/fileinfo.so
不能只写extension=fileinfo.so,否则PHP找不到模块文件
第五步:重启PHP服务/etc/init.d/php-fpm restart 或 systemctl restart php-fpm



















