Laravel 5.6环境运行Laravel 4项目遇Mcrypt依赖问题求方案
解决Laravel 4 Mcrypt依赖问题或升级至Laravel 5.6的实用方案
针对你在MacOS High Sierra环境下运行Laravel 4时遇到的Mcrypt PHP extension required错误,以及想升级到Laravel 5.6的需求,我给你整理了两个可行的方向:
一、先搞定Mcrypt依赖,让Laravel 4正常跑起来
首先要注意:你同时装了Homebrew PHP和XAMPP PHP,很可能是环境冲突导致扩展没生效,先确认你用的是哪个PHP版本:
- 终端执行
which php,如果输出是/usr/local/bin/php,说明用的是Homebrew的PHP;如果是/Applications/XAMPP/bin/php,则是XAMPP的PHP。
针对Homebrew PHP 7.1安装Mcrypt
- 先安装mcrypt基础库:
brew install mcrypt - 安装适配PHP 7.1的mcrypt扩展(注意版本要对应,PHP 7.1只能用1.0.1版本):
pecl install mcrypt-1.0.1 - 找到PHP的配置文件(执行
php --ini可以看到加载的ini路径,一般是/usr/local/etc/php/7.1/php.ini),在文件末尾添加一行:extension=mcrypt.so - 重启终端,执行
php -m,如果输出里有mcrypt,说明安装成功,再跑php artisan serve试试。
针对XAMPP PHP 7.1安装Mcrypt
XAMPP的PHP扩展需要用对应版本的编译包:
- 下载适配PHP 7.1的mcrypt.so(要匹配你的系统架构,比如x86_64)
- 把
mcrypt.so放到XAMPP的扩展目录,一般是/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20160303/ - 修改XAMPP的php.ini(路径是
/Applications/XAMPP/xamppfiles/etc/php.ini),添加extension=mcrypt.so - 重启XAMPP的Apache,然后用XAMPP的PHP执行命令:
/Applications/XAMPP/bin/php artisan serve
二、手动升级Laravel 4到Laravel 5.6(跨度较大,需谨慎操作)
从Laravel 4直接升到5.6跨度不小,建议先完整备份项目,再按以下步骤来:
1. 重构Composer依赖
- 替换项目根目录的
composer.json为Laravel 5.6的标准配置:{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": "^7.1.3", "laravel/framework": "5.6.*", "fideloper/proxy": "^4.0" }, "require-dev": { "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "phpunit/phpunit": "^7.0", "symfony/thanks": "^1.0" }, "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "extra": { "laravel": { "dont-discover": [] } }, "scripts": { "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate" ], "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover" ] }, "config": { "preferred-install": "dist", "sort-packages": true, "optimize-autoloader": true } } - 删除
vendor目录和composer.lock,执行composer install安装新依赖。
2. 替换核心框架文件
- 从Laravel 5.6的官方仓库下载基础框架包,替换项目根目录的
bootstrap/、config/、public/、resources/、routes/目录(记得先备份原目录里的自定义内容,比如配置文件、静态资源)。 - 复制新的
.env.example,重新配置你的数据库、APP_KEY等环境变量,然后执行php artisan key:generate生成新密钥。
3. 适配代码到Laravel 5.6
- 命名空间:Laravel 5+的代码都在
App\命名空间下,给原Laravel 4的控制器、模型等添加namespace App;声明,同时更新路由里的类引用。 - 路由调整:Laravel 5.6把路由分成了
web.php(前端路由)和api.php(接口路由),把原路由文件的内容迁移到对应文件,注意Route::controller已经被弃用,要改成显式的路由定义(比如Route::get('/user', 'UserController@index'))。 - 模型更新:原模型要继承
Illuminate\Database\Eloquent\Model,替换掉原来的use Eloquent;,同时检查$table、$fillable等属性的设置是否正常。 - 控制器调整:所有控制器要继承
App\Http\Controllers\Controller,调整依赖注入的方式(比如用请求类替代直接取Input)。 - 迁移文件:Laravel 5的迁移文件结构有变化,把原迁移文件改成新格式,执行
php artisan migrate:refresh前一定要备份数据库数据。
4. 测试与排错
- 启动服务
php artisan serve,逐个测试功能模块,遇到错误可以查看storage/logs/laravel.log排查问题,常见的问题比如类找不到、方法过时,逐一修复即可。
内容的提问来源于stack exchange,提问作者dlfjj
相关产品推荐
相关产品推荐

