升级到 MacOS Mojave 后,Apache 无法再加载 PHP 扩展。使用任何扩展时,我都会在 Apache 日志中收到以下错误;似乎 Apple 在 MacOS Mojave 上通过 Apache 实现了库验证。这显然使得使用 Apache 加载未签名的二进制文件变得不可能。
有没有什么解决方法不需要禁用 MacOS 的 SIP?
Failed loading //usr/local/php/extensions/xdebug.so: dlopen(//usr/local/php/extensions/xdebug.so, 9): no suitable image found. Did find: //usr/local/php/extensions/xdebug.so: code signature in =(//usr/local/php/extensions/xdebug.so) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned?
代码必须至少是临时签名的。//usr/local/php/extensions/xdebug.so: stat() 失败,errno=22
答案1
线程在 Mojave 上安装 列出了几个独立的解决方法:
- 从您的计算机上卸载 apache 和 php,并清理所有残留
- 从 homebrew 安装 apache 和 php (suneet64 回答)
/etc/apache2/httpd.conf
在行末添加LoadModule php7_module libexec/apache2/libphp7.so
仍然在
/etc/apache2/httpd.conf
取消注释第 545 行,内容是Include /private/etc/apache2/other/*.conf
答案2
对我有帮助的是:
brew update
brew upgrade
结果我得到信息
==> [email protected]
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.3/
我很困惑,因为有几个 httpd.conf,但最终在我的情况下是:/usr/local/etc/httpd/httpd.conf
因此我按照 homebrew info 所述进行了编辑:1 添加以下几行:
LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
并找到并更改了 DirectoryIndex 部分,如下所示:
<IfModule dir_module>
#DirectoryIndex index.html
DirectoryIndex index.php index.html
</IfModule>
现在 php 可以正常工作了。希望这能有所帮助