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_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
当然,在你的情况下,它应该被取消注释。有关为 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 路径,并检查这些 ^^ 内容。