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

yay*_*zis 22 upgrade php 16.04 18.04 20.04

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

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

因此,我尝试通过执行以下操作来升级操作系统(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.
Run Code Online (Sandbox Code Playgroud)

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

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

pa4*_*080 33

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
Run Code Online (Sandbox Code Playgroud)

在存储库中,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
Run Code Online (Sandbox Code Playgroud)

更新 04.2019

我已经使用上述命令集在 Ubuntu 16.04 上安装了 PHP 7.3,一切顺利。只需在这些命令中将7.2替换为7.3 - 整个过程大约需要 7 分钟。


2020 年 2 月 2 日更新

我已经迁移到 PHP 7.4并且一切顺利,在此过程中我使用了以下步骤(注意,目前 NextCloud 还不支持 php7.4):

# Absolutely mandatory step
sudo apt update
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)
# Inspect the error log for some fatal errors, 
# Some old dependencies could missing - it's normal
cat /tmp/php7.4.install.error.log
Run Code Online (Sandbox Code Playgroud)
# Mandatory step; If there is a trouble, tray: sudo apt install -f
sudo apt update && sudo apt upgrade
Run Code Online (Sandbox Code Playgroud)
# Create a backup copy of the new php.ini 
sudo cp /etc/php/7.4/apache2/php.ini{,.default}
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)
# Switch the version within Apache
sudo a2dismod php7.3 && sudo a2enmod php7.4
sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)
# Switch the CLI version
sudo update-alternatives --set php /usr/bin/php7.4
Run Code Online (Sandbox Code Playgroud)

2020 年 6 月更新

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


vid*_*rlo 5

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

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

18.04 提供 PHP 7.2。从 16.04 开始这可能是一个很好的升级路径,因为这两个版本都是 LTS 版本,有五年的支持期。

关于安全性,不要依赖该版本。Ubuntu 维护者和 Debian 维护者将安全补丁从上游向后移植到受支持的软件包中五年。