Laravel 5.2项目执行php artisan serve报类重复声明错误求助
解决Laravel 5.2项目
php artisan serve启动报错问题 问题背景
刚入职的开发人员从公司Ubuntu服务器通过SSH拷贝Laravel项目到本地,执行php artisan serve时出现大量PHP弃用提示,最终报致命错误:无法声明类Symfony\Component\HttpFoundation\Request,因为该名称已被使用。本地其他Laravel项目运行正常,尝试composer update无效。
项目composer.json配置
{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": ">=5.5.9", "laravel/framework": "5.2.*", "zizaco/entrust": "5.2.x-dev", "laravelcollective/html": "^5.2", "acacha/admin-lte-template-laravel": "2.*", "manavo/laravel-bootstrap-forms": "~0.1", "orangehill/iseed": "dev-master", "webwizo/laravel-shortcodes": "1.0.4", "mollie/mollie-api-php": "1.7.*", "doctrine/dbal": "^2.5", "anhskohbo/no-captcha": "^2.1" }, "require-dev": { "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", "phpunit/phpunit": "~4.0", "symfony/css-selector": "2.8.*|3.0.*", "symfony/dom-crawler": "2.8.*|3.0.*", "laravel/homestead": "^5.4" }, "autoload": { "classmap": [ "database", "app/Models" ], "psr-4": { "App\\": "app/" } }, "autoload-dev": { "classmap": [ "tests/TestCase.php" ] }, "scripts": { "post-root-package-install": [ "php -r \"copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "php artisan key:generate" ], "post-install-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postInstall", "php artisan optimize" ], "post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "php artisan optimize" ] }, "config": { "preferred-install": "dist" } }
报错信息
PHP已弃用提示:Symfony\Component\Finder\Iterator\FilterIterator::rewind()的返回类型应与FilterIterator::rewind(): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16711行 已弃用:Symfony\Component\Finder\Iterator\FilterIterator::rewind()的返回类型应与FilterIterator::rewind(): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16711行 PHP已弃用提示:Symfony\Component\Finder\Iterator\PathFilterIterator::accept()的返回类型应与FilterIterator::accept(): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16791行 已弃用:Symfony\Component\Finder\Iterator\PathFilterIterator::accept()的返回类型应与FilterIterator::accept(): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16791行 PHP已弃用提示:Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::getChildren()的返回类型应与RecursiveDirectoryIterator::getChildren(): RecursiveDirectoryIterator兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16889行 已弃用:Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::getChildren()的返回类型应与RecursiveDirectoryIterator::getChildren(): RecursiveDirectoryIterator兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16889行 PHP已弃用提示:Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::rewind()的返回类型应与FilesystemIterator::rewind(): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16907行 已弃用:Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::rewind()的返回类型应与FilesystemIterator::rewind(): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16907行 PHP已弃用提示:Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::current()的返回类型应与FilesystemIterator::current(): SplFileInfo|FilesystemIterator|string兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16878行 已弃用:Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::current()的返回类型应与FilesystemIterator::current(): SplFileInfo|FilesystemIterator|string兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16878行 PHP已弃用提示:Symfony\Component\Finder\Iterator\FileTypeFilterIterator::accept()的返回类型应与FilterIterator::accept(): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16945行 已弃用:Symfony\Component\Finder\Iterator\FileTypeFilterIterator::accept()的返回类型应与FilterIterator::accept(): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16945行 PHP已弃用提示:Symfony\Component\Finder\Iterator\FilenameFilterIterator::accept()的返回类型应与FilterIterator::accept(): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16962行 已弃用:Symfony\Component\Finder\Iterator\FilenameFilterIterator::accept()的返回类型应与FilterIterator::accept(): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第16962行 PHP已弃用提示:Illuminate\Container\Container::offsetExists($key)的返回类型应与ArrayAccess::offsetExists(mixed $offset): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1550行 已弃用:Illuminate\Container\Container::offsetExists($key)的返回类型应与ArrayAccess::offsetExists(mixed $offset): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1550行 PHP已弃用提示:Illuminate\Container\Container::offsetGet($key)的返回类型应与ArrayAccess::offsetGet(mixed $offset): mixed兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1554行 已弃用:Illuminate\Container\Container::offsetGet($key)的返回类型应与ArrayAccess::offsetGet(mixed $offset): mixed兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1554行 PHP已弃用提示:Illuminate\Container\Container::offsetSet($key, $value)的返回类型应与ArrayAccess::offsetSet(mixed $offset, mixed $value): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1558行 已弃用:Illuminate\Container\Container::offsetSet($key, $value)的返回类型应与ArrayAccess::offsetSet(mixed $offset, mixed $value): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1558行 PHP已弃用提示:Illuminate\Container\Container::offsetUnset($key)的返回类型应与ArrayAccess::offsetUnset(mixed $offset): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1567行 已弃用:Illuminate\Container\Container::offsetUnset($key)的返回类型应与ArrayAccess::offsetUnset(mixed $offset): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第1567行 PHP已弃用提示:Illuminate\Http\Request::offsetExists($offset)的返回类型应与ArrayAccess::offsetExists(mixed $offset): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3161行 已弃用:Illuminate\Http\Request::offsetExists($offset)的返回类型应与ArrayAccess::offsetExists(mixed $offset): bool兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3161行 PHP已弃用提示:Illuminate\Http\Request::offsetGet($offset)的返回类型应与ArrayAccess::offsetGet(mixed $offset): mixed兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3165行 已弃用:Illuminate\Http\Request::offsetGet($offset)的返回类型应与ArrayAccess::offsetGet(mixed $offset): mixed兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3165行 PHP已弃用提示:Illuminate\Http\Request::offsetSet($offset, $value)的返回类型应与ArrayAccess::offsetSet(mixed $offset, mixed $value): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3169行 已弃用:Illuminate\Http\Request::offsetSet($offset, $value)的返回类型应与ArrayAccess::offsetSet(mixed $offset, mixed $value): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3169行 PHP已弃用提示:Illuminate\Http\Request::offsetUnset($offset)的返回类型应与ArrayAccess::offsetUnset(mixed $offset): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3173行 已弃用:Illuminate\Http\Request::offsetUnset($offset)的返回类型应与ArrayAccess::offsetUnset(mixed $offset): void兼容,或使用#[\ReturnTypeWillChange]属性临时抑制该通知,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3173行 PHP致命错误:无法声明类Symfony\Component\HttpFoundation\Request,因为该名称已被使用,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3294行 致命错误:无法声明类Symfony\Component\HttpFoundation\Request,因为该名称已被使用,位于/Users/vanderpatrick/Desktop/workspace/vobyte.nl/bootstrap/cache/compiled.php第3294行
解决方案
1. 清理Laravel编译缓存
从服务器拷贝的bootstrap/cache/compiled.php缓存文件与本地环境不兼容,直接删除该缓存文件即可:
php artisan clear-compiled
2. 重新安装依赖(可选)
如果清理缓存后仍有问题,删除本地vendor目录和composer.lock,重新安装依赖:
rm -rf vendor composer.lock composer install
注意:使用composer install而非update,避免升级依赖引发更多兼容性问题。
3. 匹配PHP版本
Laravel 5.2最高兼容PHP 7.2,若本地PHP版本为8.x,会触发大量类型检查报错。可通过以下命令查看版本:
php -v
建议用PHP版本管理工具(如phpbrew、Docker)切换到PHP 7.0-7.4版本。
4. 避免重新生成编译缓存(可选)
若本地PHP版本偏高,不要执行php artisan optimize,否则会重新生成引发报错的编译文件。
关键原因
- 服务器拷贝的编译缓存文件与本地PHP版本不兼容,导致类重复加载。
- Laravel 5.2为老旧版本,不支持高版本PHP的严格类型检查,触发弃用提示及致命错误。
内容的提问来源于stack exchange,提问作者VanderPatrick
相关产品推荐
相关产品推荐

