phpinfo() 和 php -v 显示不同版本的 PHP

phpinfo() 和 php -v 显示不同版本的 PHP

我想知道php我正在使用哪个版本,因此我编写了标准脚本:

phpinfo();

这让我

PHP version 5.6.10

正确的我的应用程序需要 PHP 版本。当我在终端中尝试时:

php -i

或者

php -v

它告诉我:

PHP version 5.3.2

我不需要。然后我尝试:

which php

它告诉我:

/usr/bin/php

现在我很困惑我正在使用哪个版本的 PHP。文件已上传到托管网站,我无法对配置文件(如httpd.conf或 )进行任何更改php.ini

答案1

简短的回答。

不要惊慌!如果您担心 Apache 服务器使用的 PHP 版本,则phpinfo()始终需要关注 的输出。Apache PHP 模块和 PHP 命令行二进制文件是两个互不干扰的不同东西。

事实上,只要你调整 Apache 使其正确加载,你就可以编译和加载你想要与 Apache 一起工作的各种 PHP 版本。当 Apache 解析 PHP 页面时,PHP 命令行界面永远不会发挥作用。

PHP 的命令行版本仅用于执行特定于命令行的任务,而 Apache 的 PHP 模块永远不会接触、使用或需要它。

较长的答案。

您这样说:

我想知道php我正在使用哪个版本,因此我编写了标准脚本:

phpinfo();

这给了我 PHP 版本 5.6.10-正确的我的应用程序需要 PHP 版本。当我在终端中尝试时:

php -i or php -v   

它显示了我不需要的 PHP 版本 5.3.2。

命令行中可用的 PHP 版本与作为模块加载的 PHP 版本完全无关。它们是完全独立的东西。

因此,如果您担心您的 Web 应用程序正在使用哪个版本的 PHP,如果phpinfo()显示版本 5.6.10,那么这就是您想要/需要的,100% 没问题。

PHP 的命令行版本是一个完全独立的系统项。因此,唯一重要的是 的输出phpinfo()

如果由于某种原因您想要在 Apache 中使用不同版本的 PHP,那么您需要做的就是在某处安装已编译的 Apache PHP 模块,然后在系统的 Apache 配置中添加或调整此行:

LoadModule php5_module    /path/to/php/and/the/module/for/apache2/libphp5.so

只需将路径调整为libphp5.so— Apache 用来解析 PHP 的路径 — 然后重新启动 Apache 就可以了。

例如,有一次我必须从源代码编译 PHP 版本 5.1.6(支持 GD 库),以便在运行 PHP 5.3.5 的 Ubuntu 12.04 机器上使用。在服务器的 PHP 模块加载文件中:

/etc/apache2/mods-available/php5.load

我有这样的台词:

# LoadModule php5_module        /usr/lib/apache2/modules/libphp535.so
LoadModule php5_module        /usr/lib/apache2/modules/libphp516-gd.so

注意其中一行被注释掉libphp535.so而另一行libphp516-gd.so被取消注释?我所做的是将默认的 PHP 5.3.5 libphp5.soApache 模块重命名为,并libphp535.so在名称中添加版本号,以便我可以将其作为参考,然后命名 PHP 5.1.6(支持 GD 库)模块,libphp516-gd.so这样我也知道它是什么。这样,我就可以在系统上同时使用它们。

而且 — 就像我一开始所说的那样 — 命令行中使用的 PHP 版本与 Apache PHP 模块完全无关。因此,您可以在系统中安装任意数量的不同版本的 Apache PHP 模块,随时可用;只需调整配置并重新启动 Apache,您就可以使用您指定的 Apache 应使用的任何 PHP 版本。

答案2

如果你在 Ubuntu 14.04 上使用 Apache 从 PHP5 升级到 PHP7 时遇到此问题,以下是对我有帮助的方法(来源:这里):

在 Apache 上禁用 PHP5 模块:

sudo a2dismod php5

现在启用PHP7:

sudo a2enmod php7.1

为了反映更改,需要重新启动 Apache:

sudo systemctl restart apache2

答案3

phpinfo()如果您尝试从 Web 服务器运行 PHP 代码,则您使用的版本是=报告的版本5.6.10

您的服务器显然安装了多个版本的 PHP,当您登录并php在命令行运行时,您将获得安装到 /usr/bin/php 的旧版本。

一个服务器可以有多个版本的 PHP,而您的服务器似乎就有多个版本。

如果您需要手动执行与 Web 服务器相同的 PHP,则需要找到其他版本。尝试运行以下命令:

/usr/local/bin/php -v
/opt/local/bin/php -v
/opt/bin/php -v

其中一个可能会显示与您的 Web 服务器具有相同版本的 PHP,当您确定它是哪一个时,您可以使用它而不是默认版本。

答案4

如果我可以发表一下我的意见...

我正在升级我的 Nextcloud 版本。当我运行升级程序时,我必须以 apache 用户身份“sudo php”,但它拒绝运行,因为 apache 用户默认运行的 php CLI 版本太旧了。但是,我服务器上的 phpinfo(); 显示安装的最新 php 版本。

我意识到这是因为/home/apache/.bashrc 文件中的 PATH 变量设置为我在服务器上安装的第一个 php 版本,并且它再也没有更新过(我总是从 Github 上的源代码编译/安装 php)

解决方案:

当您在 Web 服务器上更新 php 并想要确保以 apache 用户身份使用 sudo 时使用的 CLI php 版本是最新的时,请不要忘记在此用户的 .bashrc 文件中进行更改,如下所示:

PATH=$PATH:/var/www/html: /usr/local/php7.1.32/bin export PATH

相关内容