简体   繁体   English

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

[英]Apache can’t load php7 module on macOS - Monterey

I have installed php@7.4 with brew on my Mac.我已经在我的 Mac 上安装了 php@7.4 和 brew。 Everything works fine but when I open localhost in Safari, it just show me php codes.一切正常,但是当我在 Safari 中打开 localhost 时,它只会显示 php 代码。

My code :我的代码:

<?php
echo "Hello world";

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

I think this is my problem.我认为这是我的问题。 I added this line to http.conf file and nothing worked in localhost (Safari can't connect to server "localhost").我将此行添加到 http.conf 文件中,但在 localhost 中没有任何效果(Safari 无法连接到服务器“localhost”)。

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

Finally I found the solution.最后我找到了解决方案。 Gatekeeper in macOS ensures only verified applications can be executed and this is achieved by signing the application using codesign. macOS 中的 Gatekeeper 确保只能执行经过验证的应用程序,这是通过使用 codesign 对应用程序进行签名来实现的。 Code signing has been optional on macOS Big Sur and prior but mandatory since macOS Monterey.代码签名在 macOS Big Sur 和之前是可选的,但自 macOS Monterey 以来是强制性的。

PHP module installed using homebrew is not signed, so you need to sign it first before it can be used.使用 homebrew 安装的 PHP 模块是没有签名的,所以需要先签名才能使用。

I create a Certificate Authority for code signing and a code signing certificate before I can sign the PHP module using codesign utility.在使用 codesign 实用程序对 PHP 模块进行签名之前,我创建了一个用于代码签名的证书颁发机构和一个代码签名证书。

Step 1 : How to create Certificate Authority for Code Signing in macOS第 1 步: 如何在 macOS 中为代码签名创建证书颁发机构

Step 2 : How to create code signing certificate in macOS第 2 步: 如何在 macOS 中创建代码签名证书

Step 3 : Locate location or path of PHP module from Apache's PHP LoadModule directive.第 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

Step 4 : Sign PHP module using codesign with the code signing certificate name you've created.第 4 步:使用您创建的代码签名证书名称使用 codesign 对 PHP 模块进行签名。

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

Step 5 : Open Apache configuration file with PHP LoadModule directive using your preferred text editor.第 5 步:使用您喜欢的文本编辑器使用 PHP LoadModule 指令打开 Apache 配置文件。

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

Step 6 : Add code signing certificate name after module path in PHP LoadModule directive.第 6 步:在 PHP LoadModule 指令中的模块路径后添加代码签名证书名称。

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

Then restart the apache.然后重启apache。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM