让 PHP7 和 PHP 8 共存

Zlo*_*otz 7 php fpm php-7.4 php-8

让 PHP7 和 PHP 8 共存

我已经从 PHP 7 升级到 PHP 8。正如 PHP 的通常情况一样,我仍然有 php7.4 /usr/bin(以及 php8.0)。但是,当我运行该php -v命令时,它回答 php8.0。

从那时起,当尝试安装软件(例如 Docker 和 VirtualBox)时,我收到错误消息php7.4-fpm.service: Failed with result 'exit-code',后跟Failed to start The PHP 7.4 FastCGI Process Manager. 因此,我似乎需要 php7.4 来运行才能安装此类应用程序。

但我使用 PHP 8 功能来编写网站,因此不想回到 php7.4

有没有办法同时使用php8.0和php7.4?我可以让 PHP 8 在虚拟机上运行,​​但它相当繁重。

我使用的是 Ubuntu 20(但我不确定这个问题是否特定于操作系统)。

兹洛茨

Har*_*han 8

正如 @Abilogos 在他的回答中提到的,您可以使用update-alternativescli 中的 php 的多个版本,设置为默认的版本将与php命令一起使用,但是当涉及到使用 Apache/Nginx 为网站运行特定版本时,它会得到困难,我最近也遇到了这个问题,当时我想让我的代码并行兼容 PHP 8,而不妨碍现有的工作代码,最后我能够得到使所有这些东西工作所需的东西。

这是我在 Fedora 33 上所做的

步骤 1.安装 PHP 8.0 作为默认版本并使用 Remi repo,我还安装了其他 PHP 版本(5.6、7.0、7.1、7.2、7.3 和 7.4)

步骤2.我检查将update-alternativesPHP版本从8.0更改为7.4,但其中没有条目。所以,我将所有这些安装在update-alternatives

cp /usr/bin/php /usr/bin/php80 
update-alternatives --install /usr/bin/php php /usr/bin/php80 0
update-alternatives --install /usr/bin/php php /opt/remi/php74/root/usr/bin/php 1
update-alternatives --install /usr/bin/php php /opt/remi/php73/root/usr/bin/php 2
Run Code Online (Sandbox Code Playgroud)

步骤3.现在,可以随时在cli中轻松更改PHP版本。例如,当您的应用程序依赖于某些库但它们与 PHP 8 兼容并且您想要更改默认 PHP 版本来运行composer install

步骤 4.现在,要配置 website1 在 PHP 8 上运行,并配置 website2 在 PHP 7.4 上运行,我们需要配置两个 PHP-FPM,并在不同端口上运行。

更改默认 PHP-FPM 端口

vim /etc/php-fpm.d/www.conf

;listen = /run/php-fpm/www.sock
listen = 9001
Run Code Online (Sandbox Code Playgroud)

同样,更改PHP-FPM 7.4端口

vim /etc/opt/remi/php74/php-fpm.d/www.conf

;listen = /run/php-fpm/www.sock
listen = 9002
Run Code Online (Sandbox Code Playgroud)

启动/重新启动 PHP-FPM 服务

systemctl start php-fpm
systemctl start php74-php-fpm
Run Code Online (Sandbox Code Playgroud)

步骤 5.更改虚拟主机配置文件以对 website1 和 website2 使用不同版本的 PHP

vim /etc/httpd/conf.d/website1.conf 

<FilesMatch \.php$>
    # PHP 8.0
    SetHandler "proxy:fcgi://127.0.0.1:9001"
</FilesMatch>

vim /etc/httpd/conf.d/website2.conf

<FilesMatch \.php$>
    # PHP 7.4
    SetHandler "proxy:fcgi://127.0.0.1:9002"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

重新启动 Apache/Nginx

systemctl restart httpd
Run Code Online (Sandbox Code Playgroud)

我们就完成了


Zlo*_*otz -1

删除 php7.4sudo apt-get purge php7.4-common解决了我的问题。

  • 这听起来更像是承认失败,而不是解决问题。 (3认同)