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(但我不确定这个问题是否特定于操作系统)。
兹洛茨
正如 @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)
我们就完成了