在 Ubuntu 中升级到最新的 PHP 版本

在 Ubuntu 中升级到最新的 PHP 版本

我在用NextCloud在我的服务器中,NextCloud 通知我:

您当前正在运行 PHP 7.0.32-0ubuntu0.16.04.1。升级您的 PHP 版本,以便在您的发行版支持后立即利用 PHP 组提供的性能和安全更新。

因此,我尝试通过执行以下命令升级我的操作系统(Ubuntu 16.04):

apt-get update apt-get dist-update

然后我重启了服务器并重新执行了上述命令。完成所有这些操作后,当我从终端连接时,我得到了:

Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-83-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.

而我的PHP版本仍然是PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS )

这意味着 PHP 7.0.32 是我可以在 ubuntu 16.04 中安装的最新版本;

答案1

Ubuntu 16.04 默认的 PHP 版本是 7.0。如果你想在 16.04 上安装新版本的 PHP,你需要使用额外的 PPA(如下所示)或者你必须自己编译它。

我的服务器使用 Ubuntu 16.04,目前使用 PHP 7.2,并且有多个 WordPress 和 MediaWiki 的运行实例。Web 服务器是 Apache 2.4。我用来从 PHP 7.0 迁移到 7.2 的命令是:

# Add the repository 'ppa:ondrej/php'
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update

# Install PHP 7.2
sudo apt install -y php7.2 php7.2-cli libapache2-mod-php7.2
sudo apt install -y php-imagick php-gettext php-memcache php-apcu php-pear php-xml php-xmlrpc
sudo apt install -y php-memcached php-mysql php-intl php-mbstring php-curl php-gd php-imagick
sudo apt install -y php7.2-common php7.2-mysql php7.2-cgi 
sudo apt install -y php7.2-curl php7.2-zip php7.2-mbstring php7.2-xmlrpc php7.2-gd php7.2-xml php7.2-xsl
sudo apt install -y php7.2-dev php7.2-bz2 php7.2-intl php7.2-json php7.2-opcache php7.2-readline 
sudo apt install -y php7.2-imap php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-bcmath #php7.2-mcrypt

# Update the Apache's PHP version
sudo a2dismod php7.0
sudo a2enmod php7.2
sudo systemctl restart apache2.service

# Update the CLI PHP version
sudo update-alternatives --set php /usr/bin/php7.2

在存储库中ppa:ondrej/phpPHP 7.3 也可用,我想很快迁移到这个最新版本。

如果存储库的公钥有问题,您可以使用此解决方案

/etc/php/7.2/apache2/php.ini以下是我根据一些 WordPress 和 MediaWiki 手册所做的额外调整:

zlib.output_compression = On
max_execution_time = 600
max_input_vars = 3000
memory_limit = 512M
post_max_size = 256M
upload_max_filesize = 128M
allow_url_fopen = Off
pcre.backtrack_limit=1000000
session.cookie_secure = True
session.gc_maxlifetime = 14400
session.cache_expire = 540
mbstring.encoding_translation = On

更新 04.2019

我使用上面的命令集来安装 PHP7.3在 Ubuntu 16.04 上,一切都很顺利。只需替换7.27.3在这些命令中 - 整个过程大约需要 7 分钟。


更新 02.2020

我已经迁移到 PHP7.4一切进展顺利,在此过程中我使用了以下步骤(请注意,目前 NextCloud 尚不支持 php7.4):

# Absolutely mandatory step
sudo apt update
# Generate list of php7.4 packages on tbe base of the installed 7.3 ones
# Remove 'echo' to install the packages
for pkg in $(sudo apt-cache policy *php7.3* | grep -P '^(lib.*|php)7.3.*:$' | sed -e 's/:$//' -e 's/7.3/7.4/');
do
    echo sudo apt install "$pkg" -y;
done 2>/tmp/php7.4.install.error.log
# Inspect the error log for some fatal errors, 
# Some old dependencies could missing - it's normal
cat /tmp/php7.4.install.error.log
# Mandatory step; If there is a trouble, tray: sudo apt install -f
sudo apt update && sudo apt upgrade
# Create a backup copy of the new php.ini 
sudo cp /etc/php/7.4/apache2/php.ini{,.default}
# Compare the old and the new php.ini files
# Apply the necessary changes to 7.4/apache2/php.ini
# Compare the files again in order to inspect for typos 
colordiff --side-by-side --left-column --width=240 --show-c-function /etc/php/7.{3,4}/apache2/php.ini | less -R
# Switch the version within Apache
sudo a2dismod php7.3 && sudo a2enmod php7.4
sudo systemctl restart apache2
# Switch the CLI version
sudo update-alternatives --set php /usr/bin/php7.4

更新 06.2020

现在我使用的是 Ubuntu 20.04 Server,它默认自带 php7.4,但我需要 php7.3。上面的方法,通过使用ppa:ondrej/php,解决了我的问题。

答案2

您可以手动安装更新版本。但一般来说,您不想这样做,因为您必须手动下载更新并重新构建。

LTS 版本的意义在于稳定性。您知道今天发布的 PHP 版本 18.04 将保持五年的安全更新,而无需升级版本 - 这可能会导致依赖当前版本的程序出现问题。

18.04 有 PHP 7.2 可用。这可能是从 16.04 升级的良好途径,因为两者都是 LTS 版本,具有五年的支持期。

至于安全性,不要依赖版本。Ubuntu 维护人员和 Debian 维护人员在这五年内将上游的安全补丁移植到受支持的软件包中。

答案3

2021 年 1 月,我按照以下步骤将 php 7.0 更新至 php 7.1,成功了

$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get remove php7.0 (THIS IS OPTIONAL)
$ sudo apt-get install php7.1
$ sudo apt-get install php7.1-mysqli
$ sudo apt-get install php7.1-curl
$ sudo apt-get install php7.1-xml
$ sudo apt-get install php7.1-mbstring
$ service apache2 restart

以上将:

  • 安装 vanilla php 7.1,无扩展
  • 安装一些比较常见的扩展(mysqli、curl、xml、mbstring)
  • 重新启动 apache 以完成安装

答案4

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php
php -v

相关内容