如何在Mac OS Mojave上编译和使用php扩展

7

我刚刚安装了新的OSX Mojave,你知道它预装了PHP 7.1.19和一些常用扩展程序。

首先,我不喜欢Homebrew或其他包管理工具,也不会禁用安全实用程序,如csrutil。

我已成功编译intl扩展程序,但由于代码签名问题,Apache无法加载它:

PHP Startup: Unable to load dynamic library 'intl.so' - dlopen(intl.so, 0x0009): code signature in (intl.so) not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed. in Unknown on line 0

有没有办法签署新编译的扩展,可能使用adhoc签名方法或类似的东西?
我知道有很多其他关于这个问题的主题,但所有的都没有得到答案,最多只是建议使用homebrew之类的解决方法!
谢谢
2个回答

4

经过多天的尝试,我终于找到了一个强大的解决方案,让 intl 与内置的 php 正常工作!

首先,我必须说,这个答案与代码签名无关。

这是我所做的,我忽略了内置的包(php,apache),并从源代码编译了它们。现在,我安装了最新版本的两者,并且 intl 扩展非常好用,构建新扩展就像小菜一碟,而且 php 运行它们时没有任何问题 :)

我真的不明白为什么人们要使用 homebrew 来完成这样的事情,当你可以轻松地自己编译库和扩展。

我希望这个答案能帮助到有需要的人。


进一步说明,我理解代码签名只是问题的一部分。即使您对代码进行了签名,在Catalina上仍会遇到另一个问题(如https://superuser.com/a/1536442/1100783中所述)。构建PHP和扩展将解决代码签名问题。 - Louis Charette

-3

我也有同样的问题。大家都用homebrew解决了这个问题...

codesign -vd /usr/lib/php/extensions/no-debug-non-zts-20160303/x.so
/usr/lib/php/extensions/no-debug-non-zts-20160303/x.so: code object is not signed at all


codesign -vd /usr/lib/php/extensions/no-debug-non-zts-20160303/opcache.so 
Executable=/usr/lib/php/extensions/no-debug-non-zts-20160303/opcache.so
Identifier=com.apple.opcache
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=2914 flags=0x0(none) hashes=87+2 location=embedded
Platform identifier=5
Signature size=4485
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=68


codesign -vd /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 
Executable=/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
Identifier=com.apple.xdebug
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=1985 flags=0x0(none) hashes=58+2 location=embedded
Platform identifier=5
Signature size=4485
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=64

那是说你还存在这个问题吗?如果是的话,请按照我的指示从源代码编译php和apache,然后问题就会解决了。 - Pooya Raki
当然,它已经准备好了,但它并没有解决文件签名的根本问题(这是一个大问题)。 - Carlos Arriagada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接