如何在 macOS M1 上为 Apache 启用 PHP(解决模块签名错误)

5次阅读

如何在 macOS M1 上为 Apache 启用 PHP(解决模块签名错误)

本文详解 macos m1 环境下通过 homebrew 安装 php 后,如何正确配置 apache 加载 php 模块——核心在于绕过 macos 强制的代码签名验证限制,而非简单修改 loadmodule 路径。

在 macos Monterey 及更高版本(尤其是搭载 apple Silicon M1/M2/M3 芯片的设备)上,系统内置的 apache(/usr/sbin/httpd)默认启用严格的模块代码签名验证(code signing enforcement)。当你使用 brew install php 安装 PHP 后,Homebrew 生成的 libphp.so 动态库未经过 apple 签名,因此即使路径正确、语法无误,Apache 在启动时也会因 Code signing absent 错误拒绝加载该模块,并静默失败(仅在 error_log 中记录 AH00169: caught SIGTERM 这类误导性信息)。

✅ 正确解决方案:禁用 Apache 模块签名检查

关键步骤不是改路径,而是关闭签名强制策略。

  1. 确认当前 Apache 配置语法错误
    运行以下命令验证真实报错:

    sudo apachectl configtest

    你将看到类似输出:

    httpd: Syntax error on line 190 of /private/etc/apache2/httpd.conf:  Code signing absent - not loading module at: /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
  2. 修改 Apache 启动参数,禁用模块签名验证
    编辑 Apache 的 launch daemon 配置文件

    sudo nano /System/Library/LaunchDaemons/org.apache.httpd.plist

    ⚠️ 注意:此为系统级 plist,切勿直接修改 /Library/LaunchDaemons/ 下的自定义 plist(若存在),因为系统 Apache 默认使用 /System/… 路径。

    找到 标签下已有的 httpd 行,在其后新增一行

    立即学习PHP免费学习笔记(深入)”;

    -D NO_MODULE_SIGNATURE_CHECK

    修改后片段应类似:

         httpd     -D     NO_MODULE_SIGNATURE_CHECK     -f     /private/etc/apache2/httpd.conf     -D     FOREGROUND 
  3. 更新 Apache 配置:正确加载 PHP 模块
    编辑 /etc/apache2/httpd.conf,确保启用 PHP 模块(取消注释或添加):

    # 启用 PHP 模块(路径以 brew info php 输出为准) LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so  # 添加 PHP 文件类型处理      SetHandler application/x-httpd-php   # 可选:设置默认首页支持 .php DirectoryIndex index.php index.html

    ✅ 获取准确路径(推荐):

    brew --prefix php  # 通常输出 /opt/homebrew/opt/php ls /opt/homebrew/opt/php/lib/httpd/modules/libphp.so  # 确认文件存在
  4. 重启 Apache 生效

    sudo apachectl stop sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist sudo launchctl load /System/Library/LaunchDaemons/org.apache.httpd.plist # 或更可靠方式(重载整个服务): sudo killall httpd && sudo apachectl start
  5. 验证 PHP 是否生效
    创建测试文件 /Library/WebServer/Documents/info.php:

    访问 http://localhost/info.php —— 若显示 PHP 信息页,则配置成功。

⚠️ 重要注意事项

  • 安全性权衡:NO_MODULE_SIGNATURE_CHECK 会降低模块加载安全性,但仅影响本地开发环境切勿在生产服务器启用
  • PHP 版本兼容性:Homebrew PHP 默认编译为通用架构(universal2),完全兼容 M1;无需手动编译。
  • 避免混用 ApachemacOS 自带 Apache 与 Homebrew 安装的 httpd(如 brew install httpd)互斥,本文方案基于系统 Apache + Homebrew PHP 组合。
  • 权限问题:确保 /etc/apache2/ 下配置文件可读,且 libphp.so 具有执行权限(chmod +x 通常非必需,但可检查)。

通过以上步骤,你将彻底解决 M1 Mac 上 Apache 无法加载 Homebrew PHP 模块的核心障碍——这不是路径错误,而是 macos 安全机制与开源模块生态之间的典型适配问题。

text=ZqhQzanResources