一个“;发行“;在ppa:ondrej/php5弃用之后


An "issue" after ppa:ondrej/php5 deprecation

今天我正在将LEMP堆栈上的PHP 5.5升级到5.5.35版本。升级后,我在屏幕上收到一条消息,repoppa:ondrej/php5已被弃用,如果我想继续接收php更新,我应该转到appa:ondrej/php,它现在在一个地方包括php 5.5、php 5.6和php 7.0。以前,这些版本在不同的回购中。

我听从了Ondřej的建议,运行了

sudo add-apt-repository ppa:ondrej/php

然后:

sudo apt-get update
sudo apt-get upgrade --show-upgraded

一切都很顺利,只是有两个包被搁置了:php-pearpkg php工具。当然,当包依赖关系发生变化时,这种情况会不时发生,所以我运行:

sudo apt-get install php-pear pkg-php-tools

然后,我收到一条消息,将额外安装以下软件包:

php-cli php-common php-xml php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline php7.0-xml

我立刻觉得这里不对劲。当我运行PHP 5.5时,为什么我需要PHP 7.0包?然而,我选择了"是",显然一切都很顺利。服务器正在运行,据我所知没有任何错误或冲突。然后我很好奇,我检查了一下我运行的是什么版本的PHP?

php -v

输出为:

PHP 7.0.6-1+donate.sury.org~trusty...

这里到底发生了什么?我是如何安装PHP 7.0的?为什么服务器/网站没有崩溃?由于我将nginx与php-fpm一起使用,通过检查nginx.conf,我可以清楚地看到nginx指向php5-fpm.sock,所以我肯定在这里运行php5-fpm。此外,该网站已经启动,日志中没有PHP错误。

我还上传了一个phpinfo文件。该文件显示我使用的是PHP 5.5.35。因此,有两条相互冲突的消息,其中通过ssh发出的命令显示PHP版本为7.0.6,而phpinfo文件显示服务器使用的是PHP 5.5.35。

所以我运行:

sudo apt-get remove php7.0-common

所有以前添加的php7.0包都被删除了,最初被保留的两个包也被删除了。

现在,通过SSH检查PHP版本后,它正确显示了5.5.35。当这一切发生时,服务器没有任何问题。目前的状态是,我没有php-pearpkg php工具软件包,但如果我尝试安装它们,所有这些php7.0软件包也必须安装。

我还检查了/etc/php5/etc/php文件夹。在第二个文件夹中,存在7.0文件夹,climods可用包含mods的文件夹位于该文件夹中。

有人能向我解释一下这里发生了什么,我该怎么办吗?php5和php7.0是否同时在服务器上运行?我需要LEMP+Wordpress堆栈中保留的那两个包吗?

php-pearpkg-php-tools必须依赖于默认PHP版本的PHP CLI,即PHP 7.0。安装php-cli拉取将安装/usr/bin/php7.0php7.0-cli,并将其注册为具有最高(70)优先级的备选方案以提供/usr/bin/php

除非您需要使用命令行在本地运行PHP脚本,否则安装PHP CLI二进制文件基本上是无害的。我可以推荐两种方法:

  1. 重写这些脚本以指定所需的版本,例如将php <script>更改为php5.6 <script>,或
  2. 使用update-alternatives/usr/bin/php切换到您想要的PHP版本:a)切换到特定版本update-alternatives --set php /usr/bin/php5.6或b)update-alternatives --config php手动配置版本

迁移指南的更全面版本位于DEB.SURY.ORG Wiki中。

要使用新的PHP FPM包,您需要安装:

sudo apt-get install php5.5-fpm # for PHP 5.5
sudo apt-get install php5.6-fpm # for PHP 5.6
sudo apt-get install php7.0-fpm # for PHP 7.0

并相应地调整插座,查看默认FPM配置:

sudo editor /etc/php/X.Y/fpm/pool.d/www.conf

用于套接字位置(默认情况下为/run/php/phpX.Y-fpm.sock)。