为什么 phpinfo() 和 CLI 中的 PHP 版本不同?

为什么 phpinfo() 和 CLI 中的 PHP 版本不同?

phpinfo()我意识到和php -v(在 CLI 中)报告的 PHP 版本不匹配。

phpinfo():  5.5.24
php -v: 5.6.9

我正在使用 Mac OS X 10.10(Yosemite),并安装了一个库(php-version)来尝试管理 PHP 版本。

它报告我的笔记本电脑上安装了 3 个不同的版本:

  5.4.41
  5.5.25
* 5.6.9

我想在 Apache 和 CLI 中设置相同版本的 PHP。

我如何告诉 Apache 使用哪个 PHP 版本?

我尝试在我的中写下这一行httpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

然后:

sudo apachectl restart

但所有这些都不能解决问题...在我的 PHP 信息中我仍然有:5.5.24

答案1

这里有几个不同的问题都隐藏在 PHP 版本混淆的概念下,因此将尝试尽可能清楚地解决每个问题。首先是这个:

phpinfo()我意识到和php -v(在 CLI 中)报告的 PHP 版本不匹配。

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI 与 PHP Apache 模块不同。

正如我在回答中解释的那样另一个问题,不要惊慌!如果您担心您的 Apache 服务器使用的是哪个 PHP 版本,则 的输出phpinfo()始终是您应该关注的。Apache PHP 模块和 PHP 命令行二进制文件是两个不同的东西,它们不会互相干扰。

phpinfo()如果您担心在 Apache 中设置正确的 PHP 模块版本,只需注意输出。

也就是说,您似乎仍然存在在 Apache 中加载正确的 PHP 模块的问题:

我尝试在我的中写下这一行httpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

确保您的 Apache 服务器正在加载正确的 PHP 模块。

虽然从技术上讲您所做的似乎是正确的,但我认为导致它不起作用的唯一原因是LoadModule php5_moduleApache 配置文件中存在另一个指令,它取代了您在该行设置的值。

我建议你仔细查看httpd.conf——我假设它位于此处/etc/apache2/httpd.conf——看看是否确实有LoadModule php5_module你在编辑该文件时错过或没有注意到的另一个内容。查看我在 Mac OS X 10.9.5 中的等效文件,我发现该行被注释掉了——因为我不使用 Mac OS X Apache/PHP 设置——并且内容如下:

#LoadModule php5_module libexec/apache2/libphp5.so

当然,在你的情况下,它应该被取消注释。有关为 Web 开发配置 Apache 和 PHP 的更多详细信息可以在此网站上找到

认真考虑使用 MAMP 作为 Mac OS X Apache/PHP 怪癖的替代品。

现在,我不知道你想做什么,但如果你在 Mac OS X 系统上进行 Web 开发,你应该认真考虑使用移动应用平台而不是破解核心 Mac OS X 网络堆栈来让事情运行。

MAMP 的优点在于它是 Mac OS X 中 LAMP 堆栈的极高生产级别版本。由于它面向实际的 Web 开发,因此它拥有所有模块和配置,设置方式与实际设置方式完全一致。

Mac OS X 上 Apache 和 PHP 的核心问题是软件通常已过时,配置/调整和管理起来很麻烦,当出现这种情况时调试起来也很麻烦。如果 Mac OS X 更新后,您精心设置的 Apache 和 PHP 设置被清除了,该怎么办?您又得回到原点。

答案2

我找到了问题的解决方案。编辑后,/etc/apache2/httpd.conf我使用以下命令重新启动 Apache:

sudo apachectl restart

由于某种原因,使用此命令 Apache 将不会获取更新httpd.conf并加载旧配置。

使用:

sudo apachectl -k stop
sudo apachectl -k start

对所有服务进行硬重启,并读取配置文件中的更新,最后读取新路径php5_module

/usr/local/opt/php56/libexec/apache2/libphp5.so

还要感谢@Giacomo1968 的解释

答案3

在我的环境中(安装了 Composer 的 Windows 服务器),Composer 还在 php.ini 中硬编码了各种 php 扩展的路径(例如 extension=C:/php7-3-27/ext/php_gd2.dll)。所以我也需要更改这些路径。这仍然没有更改从 Apache 网页调用的 phpinfo() 中显示的版本。事实证明,Composer 还将我的旧 php 版本文件夹添加到了 PATH 环境变量中,因此我必须将其更改为指向我的新 PHP 文件夹,然后才能看到版本更改生效。

当然,您必须确保按照本主题中的其他答案更新您的 httpd.conf。但如果这不起作用,请检查 phpinfo() 中列出的 php.ini 路径,并检查这些 ^^ 内容。

相关内容