如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

苏南大叔给大家讲讲在mac系统里面,php72的openssl扩展安装的事情,openssl的故事有些曲折。因为这个openssl的php扩展是不走寻常路的,所以,苏南大叔也没有看清路,掉坑了面了。哈哈~ 不过,openssl也是php的必备扩展,很多地方都是用得到的。比如在php代码中,最常见的file_get_contents,请求https地址的时候,就是严重依赖这个openssl的扩展的。

mac系统,编译php72的openssl扩展 - 002

成功方案

苏南大叔的最终解决方案是:把openssl编译为php自身功能,并没有把openssl加载为so文件。可以参考苏南大叔的这篇文章:https://newsn.net/say/mac-php72.html 。主要是在php的编译过程的第二步./configure后增加了新的参数--with-openssl

phpize
./configure --enable-fpm --with-mysql --with-pdo-mysql --with-zlib --with-xmlrpc --enable-zip --enable-soap --with-openssl --with-config-file-path=/etc 
make
sudo make install

当然,原版的编译参数,可以从phpinfo()里面看到。编译成功,并启用之后,就可以看到效果了。

mac系统,编译php72的openssl扩展 - 080

mac系统,编译php72的openssl扩展 - 081

这里的参数,每个人都有每个人自己不同的参数,请根据自己的实际情况设置即可。这个方案是正常启用了openssl,但是在这个方案之前,苏南大叔还经历了下面的几个失败的方案。不排除其中某个步骤是本次成功方案的垫脚石。所以,这里也描述一下,相关的失败方案。

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

从源码编译openssl

关于openssl的最新源码,可以从这里找到:https://github.com/openssl/openssl/releases,或者这里:https://www.openssl.org/source/

mac系统,编译php72的openssl扩展 - 005

mac系统,编译php72的openssl扩展 - 040

截至到发稿,稳定版是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扩展 - 042

mac系统,编译php72的openssl扩展 - 043

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扩展 - 013

mac系统,编译php72的openssl扩展 - 015

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

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扩展 - 071

mac系统,编译php72的openssl扩展 - 072

单独编译php的openssl.so扩展

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

mac系统,编译php72的openssl扩展 - 003

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

mac系统,编译php72的openssl扩展 - 004

mac系统,编译php72的openssl扩展 - 031

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

mac系统,编译php72的openssl扩展 - 009

mac系统,编译php72的openssl扩展 - 010

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

mac系统,编译php72的openssl扩展 - 052

mac系统,编译php72的openssl扩展 - 053

mac系统,编译php72的openssl扩展 - 054

mac系统,编译php72的openssl扩展 - 055

mac系统,编译php72的openssl扩展 - 056

结论

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

更多openssl相关经验文章,请点击这里查看。https://newsn.net/tag/openssl/

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。