我在用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/php
PHP 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.2和7.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