laravel new命令报php扩展缺失,因newcommand.php中ensureextensionsareavailable()方法强制校验ctype、filter、hash、mbstring、openssl、session、tokenizer,缺一不可;需用php -m验证cli实际加载情况,并确认php.ini启用且路径与web端一致。

laravel new 命令报 PHP 扩展缺失
直接运行 laravel new myapp 却提示 “The following PHP extensions are required but are not installed”,说明 Laravel Installer 启动前就卡在环境检查环节。
它实际调用的是 src/NewCommand.php 中的 ensureExtensionsAreAvailable() 方法,强制校验以下扩展是否加载: ctype、filter、hash、mbstring、openssl、session、tokenizer。缺一个都不行。
别只看 phpinfo() 页面——有些扩展虽已安装,但没在 php.ini 中启用(比如 Windows 下忘了取消 ;extension=mbstring 的注释)。验证方式是终端执行:php -m | grep -E 'ctype|mbstring|openssl'
常见坑点:
• PHPStudy 或宝塔里装了扩展,但选的是不同版本的 PHP(比如界面显示 PHP 8.2 已启用 mbstring,实际命令行跑的是系统默认的 PHP 7.4)
• Linux 下用 apt 安装了 php-mbstring,但 PHP CLI 使用的是 php-fpm 的配置路径,而 CLI 的 php.ini 在另一位置
composer create-project 卡在依赖下载
绕过 laravel new 改用 composer create-project laravel/laravel myapp --prefer-dist,结果长时间停在 Installing dependencies 阶段,大概率是网络或镜像问题。
Composer 默认走 packagist.org,国内直连极慢甚至超时。必须显式配置国内镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
同时调高超时阈值,避免中途断连:composer config -g process-timeout 600
注意两个细节:
• --prefer-dist 是必须加的,它跳过 Git 克隆,直接下压缩包,速度提升明显
• 如果你之前设过代理(比如 http-proxy),而当前网络不需要,记得删掉:composer config -g --unset http-proxy
权限拒绝或 .env 生成失败
命令看似执行完,但项目目录里没有 .env,或者 php artisan key:generate 报 file_put_contents(.env): Failed to open stream: Permission denied,本质是写入权限失控。
分三类处理:
• Linux/macOS:检查 ~/.composer 目录归属是否被 sudo 污染过,执行 sudo chown -R $USER:$USER ~/.composer
• Windows:PHPStudy 或宝塔启动的命令行若非管理员权限,无法向系统盘根目录(如 C:\myapp)写文件,建议改用用户目录(如 C:\Users\YourName\myapp)
• 项目目录本身:确认父目录有 w 权限,临时可试 chmod -R 755 /path/to/myapp(仅开发机,勿在生产用)
即使权限正常,laravel new 仍可能跳过 .env 生成——这时手动复制:cp .env.example .env(Linux/macOS)或 copy .env.example .env(Windows),再立刻运行 php artisan key:generate。
数据库驱动或队列扩展缺失导致后续命令崩溃
项目目录建好了,php artisan serve 能跑,但一执行 php artisan migrate 就报 Class 'PDO' not found 或 Driver [redis] not supported,说明缺失的是运行时扩展,不是安装时检查项。
Laravel Installer 不校验这些,但 Artisan 命令一碰数据库或缓存就会暴露问题。关键扩展包括:
• pdo_mysql(MySQL)、pgsql(PostgreSQL)——没它们连不上数据库
• redis——配了 REDIS_HOST 却没扩展,缓存和队列全挂
• fileinfo——Laravel 10+ 的验证器和上传组件强依赖,缺它 composer install 都会失败
宝塔或 PHPStudy 界面里勾选扩展后,务必重启对应 PHP 版本的服务(不是重启整个面板),否则扩展不会加载进 CLI 进程。验证 CLI 是否生效:php -r "echo extension_loaded('redis') ? 'yes' : 'no';"
最易忽略的一点:不同 PHP SAPI(CLI / FPM / Apache)可能使用不同的 php.ini 文件。用 php --ini 查 CLI 加载路径,用 phpinfo() 查 Web 端路径,二者必须一致才可靠。











