macOS BigSur系统中Homebrew安装的PHP无法加载PDFLib扩展(代码签名无效)求助
解决macOS Big Sur上PDFlib PHP扩展代码签名无效的问题
我之前帮朋友处理过一模一样的macOS安全机制限制问题,结合你的环境(Homebrew安装的PHP 7.4.23、Big Sur 11.2.3),给你几个可行的解决方案:
方案一:给PHP二进制禁用Library Validation(推荐)
这个方法只针对PHP进程放开限制,不会影响系统全局安全设置:
- 先找到Homebrew PHP的二进制路径:CLI版本一般是
/usr/local/bin/php,如果用的是FPM则是/usr/local/sbin/php-fpm - 执行以下命令给PHP添加禁用Library Validation的权限(需要sudo):
sudo codesign --remove-signature /usr/local/bin/php sudo codesign --sign - --entitlements - /usr/local/bin/php <<EOF <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.cs.disable-library-validation</key> <true/> </dict> </plist> EOF - 最后重启PHP服务:
brew services restart php@7.4
注意:如果之后通过Homebrew更新了PHP,需要重新执行上述命令——因为更新会替换PHP二进制文件,之前的权限设置会被清空。
方案二:手动给PDFlib扩展签名
如果不想修改PHP的权限,可以给扩展文件添加合法的自签名:
- 创建自签名证书:
- 打开「钥匙串访问」应用,点击顶部菜单「证书助理」->「创建证书」
- 证书名称填个好记的(比如"My Code Signing"),证书类型选「代码签名」,勾选「让我覆盖这些默认值」
- 后续步骤保持默认,最后把证书存储到「登录」钥匙串
- 给扩展签名:
执行命令用刚才创建的证书签名扩展:codesign --sign "My Code Signing" /usr/local/lib/php/ext/php_pdflib.so - 重启PHP服务测试即可
方案三:调整系统安全设置(不推荐,仅作最后手段)
临时允许扩展加载
打开「系统偏好设置」->「安全性与隐私」->「通用」,如果看到提示“php_pdflib.so被阻止使用”,直接点击「允许」就能临时解决问题。
关闭System Integrity Protection(SIP)
这会大幅降低系统安全性,只有前两个方案都无效时再尝试:
- 重启Mac,按住
Command + R进入恢复模式 - 打开「终端」,输入:
csrutil disable - 重启Mac后测试扩展是否正常
- 问题解决后,记得回到恢复模式执行
csrutil enable重新启用SIP
内容的提问来源于stack exchange,提问作者Sebastian F.
相关产品推荐
相关产品推荐

