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

Sal*_*tto 31 apache-http-server php

我意识到phpinfo()php -v(在 CLI 中)报告的 PHP 版本之间存在匹配错误。

phpinfo():  5.5.24
php -v: 5.6.9
Run Code Online (Sandbox Code Playgroud)

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

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

  5.4.41
  5.5.25
* 5.6.9
Run Code Online (Sandbox Code Playgroud)

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

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

我试图在我的httpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so
Run Code Online (Sandbox Code Playgroud)

然后:

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

但这一切都没有解决问题……在我的 PHP 信息中,我仍然有:5.5.24

Gia*_*968 16

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

我意识到phpinfo()php -v(在 CLI 中)报告的 PHP 版本之间存在匹配错误。

phpinfo():  5.5.24
php -v: 5.6.9
Run Code Online (Sandbox Code Playgroud)

PHP CLI 与 PHP Apache 模块不同。

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

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

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

我试图在我的httpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so
Run Code Online (Sandbox Code Playgroud)

确保您的 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
Run Code Online (Sandbox Code Playgroud)

当然,在你的情况下,它不会被注释掉。可以在此站点上找到有关配置 Apache 和 PHP 以进行 Web 开发的更多详细信息。

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

现在说了这么多,我不知道你在尝试做什么,但是如果你在 Mac OS X 系统上进行 Web 开发,你应该认真考虑使用MAMP而不是破解核心 Mac OS X Web 堆栈来获取东西跑步。

MAMP 的好处是它是一个极其生产级别的 Mac OS X,相当于 LAMP 堆栈。并且由于它面向现实世界的 Web 开发,因此它具有所有模块和配置的设置,正如人们应该设置的那样。

Mac OS X 上的 Apache 和 PHP 的核心问题是软件通常已经过时,配置/调整和管理很痛苦,并且在发生这样的事情时调试很头疼。如果出现了 Mac OS X 更新,清除了您精心设置的 Apache 和 PHP 设置怎么办?你又回到了第一个广场。


Sal*_*tto 5

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

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

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

使用:

sudo apachectl -k stop
sudo apachectl -k start
Run Code Online (Sandbox Code Playgroud)

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

/usr/local/opt/php56/libexec/apache2/libphp5.so
Run Code Online (Sandbox Code Playgroud)

也感谢@JakeGould 的解释