为什么PHP版本在phpinfo()和CLI中有所不同?


27

我意识到,(在CLI中)phpinfo()和所报告的PHP版本之间缺少匹配php -v

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
@bertieb问题确实与其他问题相似。我刚刚回答了这个问题,但是在这里我也将尝试回答一个特定的问题。
JakeGould 2015年

Answers:


14

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

我意识到,(在CLI中)phpinfo()和所报告的PHP版本之间缺少匹配php -v

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_module,Apache配置文件中还有另一条指令会取代您设置该行的值。

我建议您浏览一下(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

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

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

现在所有这些都说明了,我不知道您要尝试做什么,但是如果您正在Mac OS X系统上进行Web开发,则应该认真考虑使用MAMP,而不是破解核心Mac OS X Web堆栈来获取内容。运行。

MAMP的好处是,它具有与LAMP堆栈相当的生产级Mac OSX。而且由于它是针对实际Web开发的,因此它具有所有模块和配置的设置完全与应该设置它们的方式相同。

在Mac OS X上,Apache和PHP的核心问题是该软件通常已过时,配置/调整和管理很麻烦,并且在此类情况发生时很难调试。如果Mac OS X附带了更新,而该更新又抹去了您精心设置的Apache和PHP设置,怎么办?您将回到第一个方框。


您为什么回答这个重复项而不是将问题标记为重复项?
Pmpr

@Trix因为这个“重复”是在几天之内发布的不同问题的相似答案。当我在这里回答类似的评论时,“ @ bertieb问题确实与其他问题相似。我刚刚回答了这个问题,但是在这里我也将尝试回答一个特定的问题。– JakeGould 2015年9月12日,0:42”一个问题是关于命令行中PHP之间的区别。另一个是关于AND PHP模块的问题。
JakeGould

4

我找到了解决我问题的方法。编辑后,/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

也感谢@JakeGould的解释


编辑了帖子,以便-kapachectl命令中删除该标志,因为如果您检查apachectl -h那里的标志/选项不存在,则可以。不知道你从哪里得到的。同样,当您声明正在执行stopstart清除问题时,奇怪的是,restart在Linux系统上确实做到了。如果您检查位于/usr/sbin/apachectl其中的脚本(这是一个脚本,请使用任何文本编辑器进行查看),它似乎也是如此。LaunchDaemons与标准Linux相比,也许在Mac OS X上,Apache只是“怪异”?无论如何,伟大的你解决了这个。
JakeGould 2015年

只要您的信息,我发现与-k标志的命令在这里:httpd.apache.org/docs/2.2/stopping.html
萨尔瓦托雷Dibenedetto

你是对的。我浏览了/usr/sbin/apachectl(没有任何命令)的“帮助”输出,并且清楚地指出了[-k start|restart|graceful|graceful-stop|stop]。我很习惯Apache在Linux系统上的工作方式,现在看来我忘记了-kapachectl命令一起使用的标志。因此,知道您遇到的真正问题是,您尝试使用该命令重新启动sudo apachectl restart时应该-k添加了这样的标志sudo apachectl -k restart
JakeGould
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.