如何解决MacOS Monterey下Homebrew的PHP浏览器与CLI版本不一致
问题根源
终端运行的php是Homebrew安装的CLI版本,和Apache服务加载的PHP解析模块完全独立。当前浏览器输出PHP 7.4,是因为启动的Apache服务默认加载了系统自带的旧版PHP模块,没有关联到Homebrew安装的PHP 8.0。
配置步骤
- 先彻底停掉所有运行中的Apache进程,避免端口和进程冲突:
brew services stop httpd sudo apachectl stop
Mac自带的Apache和Homebrew安装的httpd是两套独立服务,必须全部停止
- 查询Homebrew安装的PHP 8.0的动态模块路径,执行命令:
find /opt/homebrew/opt/php@8.0 -name "libphp*.so"
正常会返回类似/opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp8.so的路径,复制留存备用。 - 编辑Homebrew版Apache的配置文件,文件路径为
/opt/homebrew/etc/httpd/httpd.conf:- 全局搜索旧版PHP加载配置,找到形如
LoadModule php7_module 任意路径的行,在行首加#注释掉。 - 在刚才注释的位置附近,新增PHP 8.0模块加载配置,路径替换为你上一步查到的实际路径:
LoadModule php_module /opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp8.so - 找到
DirectoryIndex配置项,在index.html前添加index.php,修改后配置为:DirectoryIndex index.php index.html - 在配置文件最末尾追加如下内容,指定Apache将.php文件交给PHP模块解析:
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> - 全局搜索旧版PHP加载配置,找到形如
- 校验配置是否存在语法错误,执行命令:
/opt/homebrew/opt/httpd/bin/httpd -t
如果输出Syntax OK即可进入下一步,否则根据报错提示回去修正配置。 - 启动Homebrew版Apache服务并设置开机自启:
brew services start httpd - 清除浏览器缓存后重新访问
phpinfo()页面,即可看到PHP版本已经切换为8.0。
注意:MacOS Monterey对系统内置Apache的权限限制极严,不建议修改系统自带Apache的配置加载第三方PHP模块,直接使用Homebrew安装的httpd服务搭配同源的PHP模块是稳定性最高的方案,不会触发系统权限拦截。
内容的提问来源于stack exchange,提问作者Kayne
相关产品推荐
相关产品推荐

