我使用的是具有多个我自己的域的共享主机。我买了一个新的,并且专门要求我使用 php 8.2 或更高版本。使用 MultiPHP 管理器,我将其设置为 PHP 8.2 (ea-php82) 并在域目录中运行 php -v 命令,它说:
PHP 8.2.18 (cli) (built: Apr 18 2024 09:00:42) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.18, Copyright (c) Zend Technologies
现在,当我运行composer命令composer install时,我收到一堆错误,说我正在使用8.1所以我输入了这些命令:
[foo@foo foo.com]$ which php
/usr/local/bin/php
[foo@foo foo.com]$ /usr/local/bin/php -v
PHP 8.2.18 (cli) (built: Apr 18 2024 09:00:42) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.18, Copyright (c) Zend Technologies
[foo@foo foo.com]$ which composer
/opt/cpanel/composer/bin/composer
然后根据需要输入此命令,就会发生这种情况:
[foo@foo foo.com]$ /usr/local/bin/php /opt/cpanel/composer/bin/composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Your lock file does not contain a compatible set of packages. Please run composer update.
Problem 1
- Root composer.json requires php ^8.2 but your php version (8.1.28) does not satisfy that requirement.
Problem 2
- laravel/framework is locked to version v11.4.0 and an update of this package was not requested.
- laravel/framework v11.4.0 requires php ^8.2 -> your php version (8.1.28) does not satisfy that requirement.
Problem 3
现在,如果我尝试的最后可能的事情是使用忽略平台要求,这也导致了错误:
[foo@foo foo.com]$ /usr/local/bin/php /opt/cpanel/composer/bin/composer install --ignore-platform-reqs
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Error
Call to undefined method ReflectionFunction::isAnonymous()
at vendor/laravel/framework/src/Illuminate/Container/Container.php:680
676▕ */
677▕ protected function getClassForCallable($callback)
678▕ {
679▕ if (is_callable($callback) &&
➜ 680▕ ! ($reflector = new ReflectionFunction($callback(...)))->isAnonymous()) {
681▕ return $reflector->getClosureScopeClass()->name ?? false;
682▕ }
683▕
684▕ return false;
+3 vendor frames
4 [internal]:0
Illuminate\Foundation\Application::Illuminate\Foundation\{closure}()
+6 vendor frames
11 artisan:13
Illuminate\Foundation\Application::handleCommand()
Error
Call to undefined method ReflectionFunction::isAnonymous()
at vendor/laravel/framework/src/Illuminate/Container/Container.php:680
676▕ */
677▕ protected function getClassForCallable($callback)
678▕ {
679▕ if (is_callable($callback) &&
➜ 680▕ ! ($reflector = new ReflectionFunction($callback(...)))->isAnonymous()) {
681▕ return $reflector->getClosureScopeClass()->name ?? false;
682▕ }
683▕
684▕ return false;
+4 vendor frames
5 artisan:13
Illuminate\Foundation\Application::handleCommand()
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1
[foo@foo foo.com]$
有什么解决办法吗?
我尝试在 cPanel 中使用 MultiPHP 管理器。我尝试过给出不同的 php 版本路径。我也尝试过使用作曲家的忽略平台要求命令。
更新你的composer.json
"require": {
"php": "^8.18",