Composer 不同的PHP版本和常见的PSR

问题描述 投票:0回答:1

关于不同 PHP 版本和 Composer 有大量答案。但似乎没有一个能解决我的问题。

为了某个项目,我必须在 Ubuntu 上从 PHP8 切换回 PHP7。 到目前为止没问题 - 我安装了不同的 PHP 版本,并且在 PHP 版本之间切换很容易:

update-alternatives --set php /usr/bin/php7.4
update-alternatives --set phar /usr/bin/phar7.4
update-alternatives --set phar.phar /usr/bin/phar.phar7.4

然后我在我的项目文件夹中运行

composer update

php7.4 /usr/bin/composer update

我在使用composer时遇到以下错误:

Parse error: syntax error, unexpected '|', expecting variable (T_VARIABLE) in 
/usr/share/php/Psr/Log/LoggerInterface.php on line 30

问题很明显,Psr 库是 PHP8。

我的问题:显然我的库需要不同的 /usr/share/php/ 位置 - 通用文件夹无法完成这项工作,因为此文件夹中的库需要随 PHP 版本而更改。

我不知道 /usr/share/php/ 在哪里配置 - 也不知道为什么 Composer 使用这个 Psr 东西。根本不。我想我还需要安装不同的作曲家版本?

php composer-php
1个回答
1
投票

首先,根据Composer的文档

Composer 的最新版本需要 PHP 7.2.5 才能运行。长期支持版本 (2.2.x) 仍提供对 PHP 5.3.2+ 的支持,以防您无法使用旧版 PHP 版本。

所以,只要您使用的是 7.2.5 或更高版本,就应该没问题。其次,我自己也管理着几个PHP版本各异的项目。我在 Fish shell 中创建了一些别名,以确保我使用具有正确 PHP 版本的 Composer(否则,它可能会拉取错误的依赖项),并且这些别名执行的功能与您手动执行的功能相同:

alias composer5="php5.6 $(which composer)"
alias composer7="php7.4 $(which composer)"
alias composer8="php8.1 $(which composer)"

我从未遇到过这种方法的问题,特别是因为

composer
是一个独立的 PHAR 存档,不需要任何外部依赖项。

现在,关于

/usr/share/php/Psr/Log/LoggerInterface.php
的问题,这是由系统范围的包含路径引起的,导致该位置在运行时被包含,因为包是在您使用 PHP 8 时安装的,因此代码使用 PHP 8 功能,现在,当您尝试使用 PHP 7 并且该包被拉取时,会导致语法错误。

快速搜索 Ubuntu 软件包数据库,发现这可能来自

php-psr-log
软件包,表明您可能使用 APT 安装了一些 PHP 软件包,从而导致安装了此依赖项。我总是不鼓励人们从 Debian 软件包安装任何 PHP 应用程序,除非它是唯一安装的 PHP 软件包/应用程序(例如在容器/VPS 等中)。这始终是重大问题的根源。您唯一应该安装的是 PHP 解释器,或许还有作曲家 PHAR;就是这样。任何其他依赖项都应该是保存在其
vendor/
文件夹中的本地包依赖项。

以下是我建议的步骤,用于检查您使用 APT 安装了哪些 PHP 软件包:

dpkg -l "*php*" | grep ii

此命令只会列出名称中包含

php
单词的包(例如,即使您有
mediawiki
包也不会显示它),但如果您看到的不仅仅是 PHP 本身,请考虑删除它们。您还可以使用
apt-cache
检查真正取决于您发现可疑的软件包的内容,即:

apt-cache rdepends php-psr-log

提示您也可以根据

php
解释器查找包。

如果目前无法删除这些

/usr/share/php/
文件,我认为有一些选项值得考虑:

  1. 在运行时调整 PHP,确保
    /usr/share/php/
    不在您的包含路径中。
  2. (暂时)移走这些文件,以便在运行时不会使用它们。但这可能会破坏其他包,所以要小心。
  3. 重新安装必须使用 PHP 7 全局安装的软件包。这将使它们仍然可以与 PHP 8(除非存在错误)和 PHP 7 一起使用。

但是又来了。没有全局安装任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.