苏南大叔给大家讲讲在mac系统里面,php72openssl扩展安装的事情,openssl的故事有些曲折。因为这个opensslphp扩展是不走寻常路的,所以,苏南大叔也没有看清路,掉坑了面了。哈哈~

报错截图

openssl也是php的必备扩展,很多地方都是用得到的。比如在php代码中,最常见的file_get_contents,请求https地址的时候,就是严重依赖这个openssl扩展的。

苏南大叔:mac系统,如何编译php72的openssl扩展? - 002
mac系统,如何编译php72的openssl扩展?(图24-1)

不成功方案里面的经验值

本来计划把这个openssl编译成一个so文件,然后在php.ini中加载的。不过结果是:费了些周折生成了openssl.so文件。但是加载到php后,导致php不能启动,一直报错:“segmentation fault:11” 。下面就是相应的编译情况。

从源码编译openssl

关于openssl的最新源码,可以从这里找到:(两个网址任选其一即可)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 005
mac系统,如何编译php72的openssl扩展?(图24-4)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 040
mac系统,如何编译php72的openssl扩展?(图24-5)

截至到发稿,稳定版是1.0.2n,最新版是1.1.1_pre2。这几个最新版的编译输出还是有较大区别的,主要体现在make install环节,似乎1.1.1这个版本更像是个安装的过程。下面是编译相关命令:

./configure
./config
make
sudo make install

有些奇怪地方就是:./configure之后,还会提示,需要./config一下,没做仔细研究。执行一下命令而已。

苏南大叔:mac系统,如何编译php72的openssl扩展? - 041
mac系统,如何编译php72的openssl扩展?(图24-6)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 042
mac系统,如何编译php72的openssl扩展?(图24-7)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 043
mac系统,如何编译php72的openssl扩展?(图24-8)

brew安装openssl

brew安装openssl的时候,对于安装php的openssl.so扩展,网上的教程上都还大量提及另外的一个包叫做openssl-devel。但是brew里面无法找到后者这个包,只有前者。网上提示说,如果不安装openssl-devel,则无法找到libcrypt。但是,目前在mac下面,并不是这样的。最新的libcrypt包含在openssl之中。

brew安装openssl的过程,也有些不走寻常路。下面是相关命令:

brew update
brew install openssl
brew link openssl
brew link openssl --force

苏南大叔:mac系统,如何编译php72的openssl扩展? - 012
mac系统,如何编译php72的openssl扩展?(图24-9)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 013
mac系统,如何编译php72的openssl扩展?(图24-10)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 015
mac系统,如何编译php72的openssl扩展?(图24-11)

当然,如果你反复尝试的过程中,可能会需要下面的命令。

brew uninstall openssl
brew cleanup

尝试brew link openssl的过程中,如果你看到了错误提示。可能下面的命令是你的替代命令。

ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/    
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

苏南大叔:mac系统,如何编译php72的openssl扩展? - 070
mac系统,如何编译php72的openssl扩展?(图24-12)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 071
mac系统,如何编译php72的openssl扩展?(图24-13)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 072
mac系统,如何编译php72的openssl扩展?(图24-14)

单独编译phpopenssl.so扩展

这个过程,依然是不走寻常路。因为在php源码的ext/openssl中,并没有期待的config.m4文件,也就是说,我们并没有办法执行正常的php扩展编译流程。但是存在着一个config0.m4文件,我们尝试把这个文件重命名之后,流程得以继续。

苏南大叔:mac系统,如何编译php72的openssl扩展? - 003
mac系统,如何编译php72的openssl扩展?(图24-15)

编译途中,会碰到提示,不能找到evp.h或者libcrypt之类的提示,会由上述安装openssl的步骤来解决。至于你选择brew安装还是源码安装,就仁者见仁智者见智了。从最终的结果上看,最终生效的:应该是源码安装最新版的1.1.1-pre2版本openssl

苏南大叔:mac系统,如何编译php72的openssl扩展? - 004
mac系统,如何编译php72的openssl扩展?(图24-16)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 031
mac系统,如何编译php72的openssl扩展?(图24-17)

cd /ext/openssl
mv config0.m4 config.m4
phpize
./configure
make
sudo make install

苏南大叔:mac系统,如何编译php72的openssl扩展? - 009
mac系统,如何编译php72的openssl扩展?(图24-18)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 010
mac系统,如何编译php72的openssl扩展?(图24-19)

过程比较坎坷,但是最终得到了期待的openssl.so文件,用php.ini加载后,就得到了本文开头提及的“segmentation fault:11” 错误提示。这是个悲伤的故事... 如果您有好的建设性意见,欢迎留言给我。回想到config0.m4,既然php官方故意写错这个文件的名字,肯定是有所用意的。也许他们并不建议我们使用这种方式安装openssl.so吧?

苏南大叔:mac系统,如何编译php72的openssl扩展? - 052
mac系统,如何编译php72的openssl扩展?(图24-20)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 053
mac系统,如何编译php72的openssl扩展?(图24-21)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 054
mac系统,如何编译php72的openssl扩展?(图24-22)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 055
mac系统,如何编译php72的openssl扩展?(图24-23)

苏南大叔:mac系统,如何编译php72的openssl扩展? - 056
mac系统,如何编译php72的openssl扩展?(图24-24)

结论

苏南大叔安装php扩展openssl.so的过程,比较崎岖坎坷。最终是把openssl构建到了php内部,而不是通过openssl.so扩展的形式存在。大家可以也试试看,如果您有好的意见,在mac环境下,php72openssl扩展顺利构建成功的话,欢迎留言给苏南大叔哦。谢谢。

更多openssl相关经验文章,请点击这里查看。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   php    openssl

本站的忠实读者小伙伴,正在阅读下面这些文章: