为什么 phpinfo() 显示的版本与 php -v 不同?



>我通过brew安装php。使用brew安装PHP。我的php-cli版本是7.2

  • 但是,如果我在服务器上使用phpinfo(),我会得到 php 版本 7.1。
  • 如果我在终端中使用php -v,我会得到 php 版本 7.2。

免责声明:我添加这个希望广泛的答案作为复兴徽章的一部分。(在问题被问到后 30 天以上回答,作为第一个答案得分为 2 分或以上(

TL;博士

由于 fpm 和 Web 服务器的运行服务状态,php -v设置可能与web-server内的phpinfo()不同。也许你需要重新启动php-fpm和/或你的web-server(apache,nginx,..(。

长版本:命令行

每次在终端中执行脚本时,基于命令行的调用(如php -vphp -iphp test.php(都会读取您的配置、选项和参数。

这意味着如果您在操作系统中更新 php,那么您将在终端会话中获得最新版本。

注意: 根据您的 PATH 变量,您仍可能会获得旧版本。

这是什么意思?即使您在操作系统上更新了 php 版本,您仍然可能有一个较旧的终端会话,该会话链接到较旧的 php 二进制文件。

这里有一个例子:我是OSX用户,通过brew安装了php。目前php链接到php@7.3.这是我验证哪些版本在何处运行的方法。为此,我正在使用哪个 php。

$ which php
/usr/local/opt/php@7.3/bin/php
$ php -v
PHP 7.3.11 (cli) (built: Oct 24 2019 11:29:42) ( NTS )
// or the equivalent "absolute path" example
$ /usr/local/opt/php@7.3/bin/php -v
PHP 7.3.11 (cli) (built: Oct 24 2019 11:29:42) ( NTS )

我的本地系统上安装了多个 php 版本。我可以单独运行它们。下面是一个示例:

$ /usr/local/opt/php@7.2/bin/php -v
PHP 7.2.20 (cli) (built: Jul  5 2019 12:56:54) ( NTS )

长版本:为什么我的phpinfo((使用了错误的php版本?

由于我们现在了解了我们可以在单个操作系统上运行多个不同版本的 php,让我们深入研究我们基于 Web 服务器的脚本,该脚本运行phpinfo()

安装新的 php 版本后,您的二进制文件将被新版本替换。棒!但。。我正在运行的 Web 服务器如何收到有关它的通知?

为此,我将参考 Unix 系统上的 php 文档 Apache 2.x第 7 点。此外,apache 允许我们为 PHP 加载不同的模块。

编辑 httpd.conf 以加载 PHP 模块。[...]

对于 PHP 7:LoadModule php7_module modules/libphp7.so

对于 PHP 5:LoadModule php5_module modules/libphp5.so

由于您正在从 PHP 7.1 升级到 PHP 7.2,因此可能没有变化,但您的 Web 服务器仍在运行旧的 php 链接版本。

在这种情况下,重新启动 apache Web 服务器应该会有所帮助,以便它可以正确拾取新的二进制文件。

请让我知道这是否可以帮助您解决问题。对于所有其他读者:如果您认为缺少某些内容或我的解释中有错误,请通过评论告诉我。

最新更新