ppa:ondrej / php5弃用后的“问题”

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

我遵循了Ondřej的build议,我跑了:

sudo add-apt-repository ppa:ondrej/php 

接着:

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

一切顺利,除了两个软件包被阻止: php-pearpkg-php-tools 。 那当然会发生,当包依赖关系改变,所以我运行:

 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包? 不过,我select了YES,显然一切都很顺利。 服务器正在运行,没有错误或confilcts,我知道。 然后,我很好奇,我检查了我运行的PHP版本是什么?

 php -v 

输出是:

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

到底发生了什么? 我是如何结束安装PHP 7.0,为什么服务器/网站没有崩溃? 由于我用php-fpm使用nginx,通过检查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-tools包,但是如果我尝试安装它们,那么所有那些php7.0包也将被安装。

我也检查了/ etc / php5/ etc / php文件夹。 在这第二个文件夹有7.0文件夹climods可用的文件夹与MODS里面驻留。

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

php-pearpkg-php-tools必须依赖于PHP CLI的默认PHP版本,那就是PHP 7.0。 安装php-cli将安装php7.0-cli ,它将安装/usr/bin/php7.0并将其注册为具有最高优先级( 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配置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/XY/fpm/pool.d/www.conf 

对于套接字位置(默认是/run/php/phpX.Y-fpm.sock )。