有许多工具,如 Docker、Vagrant、VirtualBox 等,可以让您在系统中实现多个版本的 PHP。但我想尽可能远离第三方工具,并尽可能多地利用原生工具。
那么想学习如何在Ubuntu系统上安装多个版本的PHP?好的,那太好了。
让我们假设,你有
- 操作系统:Ubuntu 16.04
- PHP:7.1(PHP-FPM)
- Nginx:1.10
并想安装
PHP 7.2
安装 PHP 7.2
运行以下命令来更新 PHP 存储库和 Ubuntu 系统
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
现在您可以安装新版本的 PHP
sudo apt install -y php7.2-fpm
sudo apt install -y php7.2-dev
php -v
如果
php -v
仍然指向旧的PHP版本,然后运行以下命令
sudo update-alternatives --set php /usr/bin/php7.2
安装 PHP 7.2 模块
您可能需要一些额外的 PHP 模块才能使 PHP 与您的应用程序一起工作。
您可以安装 Magento 2 尤其需要的最常用的模块:
sudo apt install php7.2-mysql php7.2-bcmath php7.2-curl php7.2-xml php7.2-gd php7.2-intl php7.2-mcrypt php7.2-mbstring php7.2-soap php7.2-zip
检查已安装的 PHP 模块:
php -m | grep -E 'bcmath|ctype|curl|dom|gd|hash|iconv|intl|json|mbstring|mcrypt|openssl|pdo|soap|spl|xml|xsl|zip'
要搜索 PHP 模块:
sudo apt-cache search php7.2
现在,您已经安装了新的 PHP 7.2 版本和所需的模块。同样,您可以安装 PHP 7.3、7.4、8.0 等及其相关模块。
现在一个大问题是:如何根据应用程序使用特定的 PHP 版本?
在此之前,我们应该知道 PHP 是如何使用的。
PHP 可以用作 CLI 或 Web 服务器模块(mod_php、CGI、FPM)。
切换 PHP CLI 版本
PHP的
php
命令链接到
/usr/bin/php
, 符号链接到
/etc/alternatives/php
,它再次符号链接到实际的 PHP,例如
/usr/bin/php7.2
所以这就是切换 PHP CLI 版本的逻辑。
默认情况下,PHP 安装会将 CLI 版本更改为新版本。
如果你想切换到特定版本,比如 PHP 7.2,你可以使用
update-alternatives
命令
sudo update-alternatives --set php /usr/bin/php7.2
php -v
您可以使用以下命令找到 PHP 可执行文件列表
ll /usr/bin | grep php
您可能需要运行
update-alternatives
如果您正在运行“composer”命令或任何 CLI PHP 脚本,则设置所需的 PHP 版本。
切换 PHP Web 服务器版本
你可能知道,Nginx 通过 PHP-FPM 运行 PHP 代码,它侦听 Unix 套接字。
这使得在 Nginx 的服务器块中切换 PHP 版本变得更加容易。
如果你想指向任何应用程序,比如 Magento 2 在 Nginx 上运行 PHP 7.2,你可以简单地改变值
fastcgi_pass
指令为:
您可以使用以下命令找到 PHP 可执行文件列表
fastcgi_pass unix:/run/php/php7.2-fpm.sock
查找 PHP-FPM 的 Unix 套接字列表
ll /run/php | grep sock
为了验证 Web SAPI 的 PHP 版本,您可以使用
phpinfo()
在您的 .php 文件中。
结论
有些人可能想为此使用 Docker,基于 Vagrant 的解决方案。没关系。
对我来说,我总是更喜欢原生系统,而不依赖第三方解决方案。这最大限度地减少了开销和延迟问题,从而使应用程序开发更容易和更快。
在您阅读的上面,您可以轻松地更改 PHP CLI 和 Web SAPI 版本。对于基于 CLI,您可能必须运行
update-alternatives
按需命令。但是对于 Web 应用程序,一旦设置了所需的 PHP 版本,它们将在特定的 PHP 版本上独立工作。
how-to-have-multiple-versions-of-php-on-ubuntu-sa1635d2