laravel 7 要求 php ≥ 7.2.5 且 ≤ 7.4.x,mac 上应使用 homebrew 安装 php@7.4 并强制软链,禁用系统自带 php;需手动启用 mbstring、openssl、pdo_mysql 等扩展,并通过 php -v 和 php -m 验证版本与扩展,创建项目时必须指定 laravel/laravel:^7.0。

直接上结论:Laravel 7 要求 PHP ≥ 7.2.5 且 ≤ 7.4.x(不支持 7.5+),Mac 上用 Homebrew 安装 php@7.4 是最稳妥、可长期维护的方式;但必须手动禁用系统自带 PHP,并确保 composer 和 artisan 命令实际调用的是 7.4 版本,否则运行 php artisan serve 或迁移时会报错。
确认系统 PHP 是否干扰
Mac 自带 PHP(通常为 8.3+),它会优先被 PATH 加载,导致 php -v 显示错误版本。这不是“没装对”,而是“调用错了”。
- 运行
which php—— 如果返回/usr/bin/php,说明你在用系统 PHP,必须绕过 - 运行
brew unlink php(如果之前装过其他版本)再执行brew install php@7.4 - 安装后,
brew link --force php@7.4强制软链,让php命令指向 7.4 - 验证:
php -v应输出类似PHP 7.4.33;which php应返回/opt/homebrew/bin/php(Apple Silicon)或/usr/local/bin/php(Intel)
安装并验证 Laravel 7 兼容扩展
Laravel 7 依赖 mbstring、openssl、pdo、pdo_mysql、tokenizer、xml、ctype,缺一不可。Homebrew 安装的 php@7.4 默认不启用全部,需手动确认。
- 检查已加载扩展:
php -m | grep -E "mbstring|pdo|openssl|tokenizer" - 若缺失(如
mbstring未列出),编辑配置文件:brew --prefix php@7.4查路径,然后打开<code>$(brew --prefix php@7.4)/etc/php/7.4/php.ini - 取消注释(删除分号):
extension=mbstring、extension=openssl、extension=pdo_mysql等行 - 重启终端或运行
source ~/.zshrc(或~/.bash_profile),再执行php -m确认全量出现
创建 Laravel 7 项目时指定版本
直接运行 composer create-project laravel/laravel 会拉取最新版(Laravel 13+),与 PHP 7.4 不兼容。必须显式锁死版本。
- 用 Composer 创建时加
^7.0约束:composer create-project --prefer-dist laravel/laravel:^7.0 myapp - 进入项目后,立即检查
composer.json中"laravel/framework": "^7.0"和"php": "^7.2.5|^7.3|^7.4" - 运行
php artisan key:generate前,先确认.env存在(若无,复制.env.example并重命名) - 启动服务:
php artisan serve—— 若报Class 'Illuminate\Support\Str' not found,说明 PHP 版本或扩展未生效,回退检查前两步
常见报错与绕过点
很多“环境配好了却跑不起来”的问题,其实卡在几个隐蔽环节:
-
composer create-project失败并提示Your requirements could not be resolved:不是网络问题,是当前composer使用了高版本 PHP(比如 8.2)去解析 Laravel 7 的依赖。解决方法:php@7.4 -d memory_limit=-1 /opt/homebrew/bin/composer create-project --prefer-dist laravel/laravel:^7.0 myapp(显式用 7.4 执行) -
php artisan migrate报SQLSTATE[HY000] [2002] No such file or directory:默认连接的是本地 socket,但 Homebrew MySQL 默认走 TCP。改.env中DB_HOST=127.0.0.1(而非localhost) -
php artisan serve启动后浏览器空白或 500:检查storage/logs/laravel.log,90% 是mbstring或tokenizer没启用,或APP_KEY为空且未生成
真正麻烦的从来不是“装什么”,而是“哪个 php 在执行”和“哪个扩展被加载”。每次执行命令前,用 php -v 和 php -m 快速交叉验证一次,比反复重装快得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











