Apache 无法在 macOS 上加载 php7 模块 - Monterey

Apache can’t load php7 module on macOS - Monterey

我已经在 Mac 上安装了带有 brew 的 php@7.4。一切正常,但是当我在 Safari 中打开 localhost 时,它只显示 php 代码。

我的代码:

<?php
echo "Hello world";

和本地主机上的结果: result on localhost

我认为这是我的问题。我将此行添加到 http.conf 文件,但在本地主机中没有任何效果(Safari 无法连接到服务器“本地主机”)。

LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

我终于找到了解决办法。 macOS 中的 Gatekeeper 确保只能执行经过验证的应用程序,这是通过使用协同设计对应用程序进行签名来实现的。代码签名在 macOS Big Sur 和之前是可选的,但自 macOS Monterey 以来是强制性的。

PHP使用homebrew安装的模块没有签名,需要先签名才能使用

在使用代码签名实用程序对 PHP 模块进行签名之前,我创建了一个用于代码签名的证书颁发机构和一个代码签名证书。

第 1 步: How to create Certificate Authority for Code Signing in macOS

第 2 步: How to create code signing certificate in macOS

第 3 步:从 Apache 的 PHP LoadModule 指令找到 PHP 模块的位置或路径。

grep -nir "^loadmodule.*php" /etc/apache2 /etc/apache2/other/00-httpd.conf:4:LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

第 4 步:使用代码签名和您创建的代码签名证书名称对 PHP 模块进行签名。

codesign --sign "<Your Name>" --force --keychain /Library/Keychains/login.keychain-db /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

第 5 步: 使用您喜欢的文本编辑器,使用 PHP LoadModule 指令打开 Apache 配置文件。

sudo nano /etc/apache2/other/00-httpd.conf

第 6 步: 在 PHP LoadModule 指令中的模块路径后添加代码签名证书名称。

LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so "<Your Name>"

然后重启apache。