MacOS Monterey 12.4下Apache无法解析PHP文件问题求助
MacOS(M1)Homebrew环境Apache不解析PHP的修复方案
核心原因:Homebrew安装的Apache默认未加载PHP处理模块,也未配置.php后缀的解析规则,因此访问PHP文件时会直接返回源码。按以下步骤操作即可修复:
1. 确认PHP模块路径
M1芯片设备上Homebrew安装的PHP8模块默认路径为/opt/homebrew/opt/php/lib/httpd/modules/libphp.so,先执行命令确认文件存在:
ls /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
如果提示文件不存在,执行brew info php查看当前安装PHP版本对应的实际模块路径,后续配置替换为实际路径即可。
2. 修改Apache主配置文件
Homebrew版Apache的主配置文件默认路径为/opt/homebrew/etc/httpd/httpd.conf,用任意编辑器打开该文件,依次做以下修改:
- 在模块加载区块(和其他
LoadModule配置放在一起),新增PHP模块加载规则:
注意:PHP8之前的版本模块名需对应改为LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.sophpX_module(X为对应大版本号),你安装的PHP8.1直接使用上述配置即可 - 找到
DirectoryIndex配置项,默认值一般为DirectoryIndex index.html,在index.html前追加index.php,修改后为:DirectoryIndex index.php index.html - 在配置文件最末尾追加PHP文件匹配规则,指定.php后缀文件交由PHP模块处理:
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> - 如果你已将DocumentRoot修改为家目录下的自定义路径,需确认对应
<Directory>配置块中开启了Require all granted权限,避免出现访问被拒绝的问题。
3. 校验配置并重启Apache
先执行配置语法校验,避免配置错误导致服务启动失败:
apachectl configtest
如果返回Syntax OK,重启Apache服务让配置生效:
brew services restart httpd
如果你之前是手动启动的Apache,先执行apachectl stop关闭旧进程,再执行apachectl start启动新进程即可
4. 验证效果
刷新浏览器访问http://localhost/test.php,正常将显示PHP版本、配置参数等phpinfo页面内容,不再返回原始PHP源码。
常见踩坑排查
- 不要修改Mac系统自带Apache的配置文件(路径为
/etc/apache2/),Homebrew安装的Apache配置独立存放在/opt/homebrew/etc/httpd/目录,修改系统自带配置不会对Homebrew版Apache生效。 - 如果重启后仍返回源码,执行
ps aux | grep httpd查看运行中的Apache进程路径,确认当前启动的是/opt/homebrew/路径下的Homebrew版Apache,而非系统自带的Apache进程。 - 如果出现403权限错误,给自定义DocumentRoot目录授予Apache运行用户(默认为
daemon)的读权限即可。
内容的提问来源于stack exchange,提问作者Inder Singh Thakur
相关产品推荐
相关产品推荐

