【发布时间】:2016-09-08 21:57:37
【问题描述】:
今天我将我的 LEMP 堆栈上的 PHP 5.5 升级到版本 5.5.35。升级后,我在屏幕上收到一条消息说 repo ppa:ondrej/php5 已弃用,如果我想继续接收 php 更新,我应该转到 ppa:ondrej/php > 现在包括one place 中的 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-pear和pkg-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 包?但是我选择了YES,显然一切都很好。服务器正在运行,没有我知道的错误或冲突。然后我很好奇,我检查了我运行的是什么版本的 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-pear 和 pkg-php-tools 包,但是如果我尝试安装它们,所有这些 php7.0 包也必须安装。
我还检查了 /etc/php5 和 /etc/php 文件夹。在第二个文件夹中有 7.0 文件夹,其中有 cli 和 mods-available 文件夹,其中包含 mods。
有人可以向我解释这里发生了什么以及我应该怎么做吗? php5 和 php7.0 是否同时在服务器上运行?我需要在 LEMP + Wordpress 堆栈中保留的那两个包吗?
【问题讨论】:
-
最有可能
/usr/bin/php指向php7.0-cli -
在我的 debian 服务器上
/usr/bin/php指向/etc/alternatives/php指向/usr/bin/php7.0(是的,我同时运行 PHP 5.6 和 7.0)。服务器上的符号链接可能相同。 -
我使用 Ubuntu,
/etc/alternatives/php指向/usr/bin/php5。 -
表示更新了cli-version,但是
php-fpm的版本没有改变。 cli 和 fpm - 包有不同的可执行文件。它们不会同时运行,只是两个不同的包。 -
是的,没错,我认为是这样,但是: 1. 这怎么可能? 2. 为什么 phpinfo 文件和 ssh 命令显示不同的输出? 3. 为什么还有一个
/etc/php/7.0文件夹,里面有模块? 4.php-pear和pkg-php-tools包对于 LEMP+Wordress 堆栈是必不可少的吗?