laravel 4.2要求php 5.4+但不支持php 7.4及以上,兼容php 5.6–7.3;需用php@7.3、--ignore-platform-reqs安装,并修改index.php为绝对路径引用,启用pdo_mysql扩展,db_host须设为127.0.0.1。

确认 PHP 版本是否兼容 Laravel 4.2
Laravel 4.2 要求 PHP 5.4+,但**不支持 PHP 7.4 及以上版本**。如果你的 Mac 已升级到 macOS Sonoma/Ventura 后默认带 PHP 8.x,或通过 Homebrew 安装了 php@8.2 等新版,composer create-project laravel/laravel blog "4.2.*" 会直接失败,报错类似:
Problem 1
- laravel/laravel 4.2.x-dev requires php ~5.4 -> your PHP version (8.2.12) does not satisfy that requirement.
必须降级到 PHP 5.6 或 7.0–7.3(Laravel 4.2 实际在 PHP 7.3 下可跑通,但需手动绕过部分弃用警告)。推荐使用 php@7.3(Homebrew 最后支持的 7.x 版本):
- 运行
brew install php@7.3(若未安装) - 执行
brew unlink php && brew link --force php@7.3切换当前 CLI 的 PHP 版本 - 验证:
php -v应输出PHP 7.3.x,且which php指向/opt/homebrew/bin/php(Apple Silicon)或/usr/local/bin/php(Intel)
用 Composer 拉取 Laravel 4.2 并禁用平台检查
即使 PHP 版本满足,Composer 默认会校验 platform.php 配置,而 Laravel 4.2 的 composer.json 声明的是 "php": "~5.4",与你实际的 7.3 不匹配,仍会拒绝安装。必须显式跳过平台约束:
- 执行:
composer create-project --no-interaction --ignore-platform-reqs laravel/laravel blog "4.2.*" -
--ignore-platform-reqs是关键,它让 Composer 忽略php、ext-*等环境要求 - 不加该参数,你会卡在
Your requirements could not be resolved错误里 - 项目生成后,进入
blog/目录,运行php artisan key:generate手动生成密钥(Laravel 4.2 不自动写入.env)
启动服务前必须改 public/index.php
Laravel 4.2 的 index.php 默认加载 bootstrap/autoload.php 和 bootstrap/start.php,但新版 PHP(尤其 7.2+)对 getcwd() 和相对路径更敏感,常见错误:
Warning: require(../bootstrap/autoload.php): failed to open stream...
解决方法是将 public/index.php 中这两行:
require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/start.php';
改为绝对路径引用(用 __DIR__ 向上定位):
require dirname(__DIR__).'/bootstrap/autoload.php'; $app = require_once dirname(__DIR__).'/bootstrap/start.php';
否则 php artisan serve 或 Nginx/Apache 下都会 500。
数据库和扩展兼容性容易被忽略
Laravel 4.2 默认用 mysql 驱动,但它依赖 pdo_mysql 扩展,而 Homebrew 安装的 php@7.3 默认不启用该扩展。检查并启用:
- 运行
php -m | grep pdo,确认输出含pdo_mysql - 若无,编辑
php.ini(路径可通过php --ini查看),取消注释:extension=pdo_mysql - 重启终端,再运行
php -m | grep mysql确认生效 -
.env中的DB_HOST=127.0.0.1不能写成localhost(MySQL 本地 socket 行为在 4.2 下不稳定)
旧版本没有 php artisan migrate:fresh,首次建表只能用 php artisan migrate,且迁移文件必须严格按 2014_10_12_000000_create_users_table.php 格式命名,时间戳错一位就报错。











