0%

PHP编译OpenSSL模块的小插曲

环境:

  • CentOS Linux release 7.4.1708
  • php-7.2.13

操作步骤

源码编译PHP,添加OpenSSL支持
先看一下:

1
2
3
4
$ ./configure -h | grep openssl
--with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 1.0.1)
--with-openssl-dir=DIR FTP: openssl install prefix
--with-openssl-dir=DIR SNMP: openssl install prefix

好几个配置项,看起来很迷糊,不知道该用哪个。打印help全文看下上下文

1
2
3
4
5
6
7
8
9
10
$ ./configure -h
...
--with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 1.0.1)
...
--enable-ftp Enable FTP support
--with-openssl-dir=DIR FTP: openssl install prefix
...
--with-snmp=DIR Include SNMP support
--with-openssl-dir=DIR SNMP: openssl install prefix
...

FTP,SNMP两个模块都需要OpenSSL代码,所以在各自的模块命令下分别又列了一遍,其实没有本质区别

那么,with-openssl=DIR 和 with-openssl-dir=DIR 的区别是什么,到底该用那个。经测试发现:

  • with-openssl=DIR的作用有两个:

    • 标志编译OpenSSL
    • 指定OpenSSL目录
  • with-openssl-dir=DIR 的作用只有一个:

    • 指定OpenSSL目录

由此可知, with-openssl-dir 用于指定代码目录,比如只编译FTP不编译OpenSSL时就只用 with-openssl-dir,而当需要编译OpenSSL模块时,需要 with-openssl。

为什么不指定路径,OpenSSL模块也可以编译成功,比如

1
./configure --with-openssl

查看 ./configure 文件,原来文件里提供了默认的 OpenSSL 路径

1
93237       PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl"

所以在命令行中不提供目录,只要目录默认安装也可编译成功,也算是”源码之前,了无秘密”。