我想知道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.so
Apache 模块重命名为,并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