我的客户有一个laravel 7项目托管在一个共享主机上的子文件夹中。一切都很好,直到最近主机公司升级到php v8.1.12,导致使用composer dump-autoload
时出错。我已经能够将特定项目的php版本反转到7.4甚至7.3。但每次尝试运行composer update
时,composer都会正确加载,但当它到达Generating optimized autoload files
时,我会收到以下错误:Deprecation Notice: Return type of Illuminate\Container\Container::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home1/rootfolder/public_html/projectfolder/vendor/laravel/framework/src/Illuminate/Container/Container.php:1270 Deprecation Notice: Return type of Illuminate\Container\Container::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home1/rootfolder/public_html/projectfolder/vendor/laravel/framework/src/Illuminate/Container/Container.php:1281 Deprecation Notice: Return type of Illuminate\Container\Container::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the [\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home1/rootfolder/public_html/projectfolder/vendor/laravel/framework/src/Illuminate/Container/Container.php:1293 Deprecation Notice: Return type of Illuminate\Container\Container::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home1/rootfolder/public_html/projectfolder/vendor/laravel/framework/src/Illuminate/Container/Container.php:1306 > @php artisan package:discover --ansi
当我php --version
时,我得到:PHP 7.3.33 (cli) (built: Nov 9 2022 17:42:02) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies with the ionCube PHP Loader + ionCube24 v10.4.5,
Copyright (c) 2002-2020, by ionCube Ltd. with Zend OPcache v7.3.33, Copyright (c) 1999-2018, by Zend Technologies
我已经阅读了多达50篇文章指出类似的问题在这里的SO,我还探索了更多的问题和答案以外的SO,但没有使我能够解决我的问题,因为过去2天.以下是我的尝试:
已更改作曲者
"require": {
"php": "^7.2.5"
至
"require": {
"php": "^7.2.5|^8.1.12"
和
"require": {
"php": ">=7.2.5"
运行composer update
而不删除composer.lock
运行composer install
而不删除composer.lock
运行composer self-update
而不删除composer.lock
已删除composer。锁定并运行composer update
已删除composer。锁定并运行composer install
已删除composer。锁定并运行composer self-update
运行composer clear cache
联系支持人员,这样的名单还在不断增加。
我所做的一切,似乎composer继续承认v8.1.12是当前的php,但主机支持团队明确表示不能更改,因为它会自动设置为可用的最高PHP。奇怪的是,我还看到Composer在homedirectory .Composer
上创建了一个文件夹,但该项目位于具有唯一域名的子文件夹中。我不是很好的Laravel,PHP,和 composer ,但一些指导将做。
我的最后一个选择可能是升级整个项目,这是相当棘手的,因为它涉及到各种依赖关系,目前还没有完全优化的Laravel 8或9
1条答案
按热度按时间3pvhb19x1#
我不认为这是我的问题的真正答案,但老实说,这是唯一准确的,可持续的答案,无休止的战争涉及PHP,Composer和Dependency版本.在不眠之夜后,我总结了更新我的客户的项目到最新的Laravel,即Laravel 9截至写这个答案.虽然这是艰苦的,最后的满足感是完全值得的。如果你从谷歌来到这里,希望得到一个真正的答案,那么我必须建议,做出我不得不做出的艰难选择可能是你休息的机会。对于那些拉拉威尔技能比我低的人来说(在写这个答案的时候),好吧,你还不如省下几巴克斯让Laravel Shift为你做升级。感谢大家,有时候沉默才是得到正确答案所需要的。