0

我正在设置一个新的 macbook(Monterey 12.2.1 芯片 Apple M1 Pro),并安装了 PHP 7.4 和 homebrew。我将 PHP 配置为作为 MacOS (Apache/2.4.51) 附带的 Apache2 服务器的模块运行。我立即遇到了麻烦,因为在我对它进行代码签名之前,看门人不允许我将 php 作为 apache 模块从 homebrew 运行。我确实对它进行了代码设计:

codesign --sign "Mike Andersen" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so

之后 PHP 完美运行。然后我用 PECL 安装了 xdebug:arch -x86_64 sudo pecl install xdebug

当我从命令行检查它时,一切看起来都正确:

php -v
PHP 7.4.28 (cli) (built: Feb 28 2022 07:33:39) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.28, Copyright (c), by Zend Technologies
    with Xdebug v3.1.3, Copyright (c) 2002-2022, by Derick Rethans

php --ini
Configuration File (php.ini) Path: /opt/homebrew/etc/php/7.4
Loaded Configuration File:         /opt/homebrew/etc/php/7.4/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/7.4/conf.d
Additional .ini files parsed:      /opt/homebrew/etc/php/7.4/conf.d/20-ext-opcache.ini,
/opt/homebrew/etc/php/7.4/conf.d/99-xdebug.ini

但从浏览器加载失败 - 浏览器列出了 99-xdebug.ini 文件:

Additional .ini files parsed    /opt/homebrew/etc/php/7.4/conf.d/20-ext-opcache.ini, /opt/homebrew/etc/php/7.4/conf.d/99-xdebug.ini

但没有关于 xdebug 的其他内容。我检查了 apache 错误日志并看到:

Failed loading /opt/homebrew/lib/php/pecl/20190902/xdebug.so:  
dlopen(/opt/homebrew/lib/php/pecl/20190902/xdebug.so, 0x0009): 
tried: '/opt/homebrew/lib/php/pecl/20190902/xdebug.so' 
(code signature in <8E9B311F-7332-3812-89A8-91BA8FB71682> '/opt/homebrew/lib/php/pecl/20190902/xdebug.so' 
not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), 
'/usr/lib/xdebug.so' (no such file)

我也尝试签署 xdebug.so 文件:

codesign --sign "Mike Andersen" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/lib/php/pecl/20190902/xdebug.so
/opt/homebrew/lib/php/pecl/20190902/xdebug.so: replacing existing signature

并重新启动了 apache,但在 apache 日志中仍然出现相同的错误。我也试过重新签名 PHP,没有帮助。我也尝试过禁用网守:

sudo spctl --master-disable

那也没什么区别。

我整个早上都在谷歌上搜索,找不到任何关于如何解决这个问题的信息。现在一定有人已经看到了,所以我希望你们中的一个人是那个人,可以帮助兄弟。提前感谢您提供的任何帮助。

4

1 回答 1

2

看起来解决此问题的最简单方法是不使用 Apple 随 Mac OS 提供的 Apache。

我用brew安装了apache: brew install apache2

并更新了 brew 的 httpd.conf 文件以使用端口 80,并指向 Exactly。这。相同的。我用于 Apple 的 Apache 的 Libphp7.so 文件。没有重新编译,没有代码设计,什么都没有。然后我停止并禁用了 Apple 的 Apache:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
sudo apachectl stop

最后,重新启动 brew 的 apache: brew services restart httpd

重新加载了我的 phpinfo 文件,所有的 xdebug 都在那里。第一次尝试!

我认为这里的根本问题是,Apple 编译 Apache 以坚持 codesigning,然后使 codesigning 变得不透明和困难。我仍然很想知道这个问题是否有真正的解决方案,但在那之前,使用 Brew 的 Apache,你应该很高兴。

如果您在 PHP 代码设计方面需要帮助,这是我使用的指南: https ://www.simplified.guide/macos/apache-php-homebrew-codesign

于 2022-03-04T21:58:24.520 回答