如何在Ubuntu上安装多个版本的PHP
本教程向您展示如何 安装多个版本的PHP 在Ubuntu上,让特定的Apache虚拟主机或Nginx服务器块使用其中之一。 如果您的服务器上有多个Web应用程序,但是其中一个或两个与默认Ubuntu存储库中的PHP版本不兼容,这将很有用。 Ubuntu 16.04存储库包含PHP7.0,而Ubuntu 18.04存储库包含PHP7.2。 我们将看到如何安装 的PHP5.6, PHP7.0, PHP7.2 和 PHP7.4 在单个Ubuntu服务器上。
通过PPA在Ubuntu上安装PHP的多个版本
安装多个PHP版本的最简单方法是使用OndřejSurý的PPA,后者也是certbot PPA的维护者。 要添加此PPA,请在终端中运行以下命令。 的 software-properties-common
如果要从PPA安装软件,则需要软件包。 它会自动安装在Ubuntu桌面上,但在您的Ubuntu服务器上可能会丢失。
sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update
现在您可以安装 PHP7.4 在Ubuntu上执行以下命令。
sudo apt install php7.4 php7.4-fpm
并安装一些常见的PHP7.4扩展。
sudo apt install php7.4-mysql php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl
您可以输入以下内容查看所有可用的PHP7.4扩展 sudo apt install php7.4
然后按两次Tab键。
安装 PHP7.2 在Ubuntu上运行
sudo apt install php7.2 php7.2-fpm
安装一些常见的PHP7.2扩展。
sudo apt install php7.2-mysql php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl
您可以用相同的方式安装PHP7.0和PHP5.6。 只需替换这些命令中的版本号即可。
在Apache虚拟主机中切换PHP版本
默认情况下,Apache在所有虚拟主机上使用一个PHP版本。 如果要在特定虚拟主机中使用其他PHP版本,则需要禁用Apache PHP模块并通过PHP-FPM运行PHP代码。 检查是否 mod_php
已安装。
dpkg -l | grep libapache2-mod-php
如果已安装,则需要禁用它。 例如,我有 libapache2-mod-php7.2
安装在我的Ubuntu 18.04服务器上,
我通过运行禁用它:
sudo a2dismod php7.2
您还需要禁用前叉MPM模块。
sudo a2dismod mpm_prefork
现在,您需要运行以下命令来启用三个模块,以便使用PHP-FPM,无论是否 mod_php
已安装在您的服务器上。
sudo a2enmod mpm_event proxy_fcgi setenvif
PHP-FPM配置代码段位于 /etc/apache2/conf-available/
。
假设您要在Apache虚拟主机中使用PHP7.4,然后打开虚拟主机配置文件,并在 <VirtualHost>
标签。
Include /etc/apache2/conf-available/php7.4-fpm.conf
像这样:
保存并关闭文件。 然后检查语法。
sudo apachectl -t
重新启动Apache,以使更改生效。
sudo systemctl restart apache2
现在假设您要在Mautic虚拟主机中使用PHP7.2,因为Mautic与PHP7.4不兼容,然后在您的Mautic虚拟主机之间添加以下行: <VirtualHost>
标签,然后重新启动Apache。
Include /etc/apache2/conf-available/php7.2-fpm.conf
要测试您的虚拟主机使用哪个PHP版本,您可以创建一个 info.php
文件放在您的文档根目录中(假设 /var/www/html
)。
sudo nano /var/www/html/info.php
将以下PHP代码粘贴到文件中。
<?php phpinfo(); ?>
保存并关闭文件。 然后在浏览器地址栏中输入
your-domain.com/info.php
在Nginx服务器块中切换PHP版本
在Nginx服务器块中切换PHP版本非常容易。 您可能知道,Nginx通过PHP-FPM运行PHP代码,该程序在Unix套接字上侦听。 套接字文件位于 /run/php/
目录。
从屏幕截图中可以看到,我的服务器上有四个PHP-FPM套接字文件,分别对应于不同的PHP版本。 您的Nginx服务器阻止文件通常具有以下片段以连接到PHP-FPM服务器。
location ~ .php$ { fastcgi_pass unix:/run/php/php5.6-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; }
Nginx使用的PHP版本由代码段的第二行确定。 要在特定的Nginx服务器块中使用PHP7.4,请将该行更改为:
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
要在Nginx服务器块中使用PHP7.2,请将该行更改为
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
我确定您现在知道了。 保存并关闭文件。 然后重新加载Nginx以使更改生效。
sudo systemctl reload nginx
要测试您的服务器块使用哪个PHP版本,您可以创建一个 info.php
文件放在您的文档根目录中(假设 /var/www/html
)。
sudo nano /var/www/html/info.php
将以下PHP代码粘贴到文件中。
<?php phpinfo(); ?>
保存并关闭文件。 然后在浏览器地址栏中输入
your-domain.com/info.php
如何为命令行设置默认的PHP版本
要设置默认的命令行PHP版本,请运行以下命令。
sudo update-alternatives --config php
包起来
而已! 我希望本教程可以帮助您使用Apache和Nginx在Ubuntu 16.04 / Ubuntu 17.20上运行多个PHP版本。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯,或在Google +,Twitter或我们的Facebook页面上关注我们。