使用 OpenSSL 编译 PHP 5.3.29 失败

使用 OpenSSL 编译 PHP 5.3.29 失败

我们需要在 Ubuntu 16.04 服务器上安装 PHP5.3 来替换我们即将替换的旧版第三方应用程序,但我们仍需要等待一段时间。

因此,我使用 FPM 编译了 PHP5.3.29,使其能够与我们的 Nginx Stack 配合使用。但是,我在将 OpenSSL 编译到 PHP 中时遇到了困难。所以,以下是我目前所做的工作:

使用系统安装的 OpenSSL (v 1.0.1j)

尝试编译 PHP--with-openssl时运行 make 失败并出现以下错误:

/usr/bin/ld: ext/openssl/openssl.o: undefined reference to symbol 'SSL_get_verify_result@@OPENSSL_1.0.0'
//lib/x86_64-linux-gnu/libssl.so.1.0.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:267: recipe for target 'sapi/fpm/php-fpm' failed

因此我在网上搜索了此错误的修复方法,但找到的方法都没有成功。不过,我看到的一篇帖子提到,使用旧版本的 OpenSSL 可以解决这个问题。所以我就尝试了。

使用自编译的旧版本 OpenSSL (v 0.9.8w)

我使用该标志编译了 OpenSSL,--prefix=/opt/openssl以确保它不会干扰 OpenSSL 的系统安装。之后,我尝试再次使用编译 PHP --with-openssl=/opt/openssl,一切顺利。

但是,在使用需要 PHP 5.3 的应用程序运行一些测试后,我很快发现在使用带有 https url 的 cURL-Requests 时,为我的请求提供服务的 FPM-Child 出现分段错误。因此,我调试了出现故障的子进程,并能够将原因追溯到 OpenSSL。好的 - 现在该怎么办?

完全不使用 OpenSSL 来编译 PHP

因此,我决定完全省略 OpenSSL 扩展,实际上成功编译了(这并不奇怪),并且使用我刚刚编译的 PHP 安装通过 curl 请求了 https url。我以为一切都很好,但事实并非如此(也不奇怪):运行应用程序一段时间后,发现它大量使用了file_get_contents()与 https url 结合的调用。这些都失败了,因为 PHP 缺少 https 流支持,因为缺少 OpenSSL 扩展。

所以我不知道下一步该做什么,我希望你能给我指明正确的方向。

仅供参考,这是我用于编译的配置(--with-openssl 参数的值不同):

./configure \
--prefix=/usr/local/php5.3 \
--with-config-file-path=/etc/php/5.3 \
--with-mysql \
--with-mysqli=mysqlnd \
--with-jpeg-dir=/usr/lib/x86_64-linux-gnu/ \
--with-png-dir=/usr \
--with-gd \
--enable-soap \
--enable-bcmath \
--enable-mbstring \
--with-curl \
--with-openssl=/opt/openssl
--with-zlib=/usr \
--enable-ftp \
--enable-zip \
--with-mcrypt \
--enable-pdo --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd \
--enable-fpm

非常感谢!

答案1

以下是我执行此操作时的笔记:

步骤1- 构建 php - 在你解压 php 的地方执行(可能是 [homedir]/software/php5329),这样它就可以安装到 [homedir]/usr/php5329

· PHP 构建编译配置 - ./configure --prefix=[homedir]/usr/php5329 --with-snmp --with-mysql=/usr/phab/mysql/bin --with-libdir=lib64  --with-pdo-mysql=/usr/phab/mysql/ --with-pear=[homedir]/usr/php5329 --with-config-file-path=[homedir]/usr/php5329; make clean ; make -j 32 ; make install 

第2步- 构建 libssh - 在您解压 libssh-1.7.0 的位置执行(可能是 [homedir]/software/libssh-1.7.0),以便它可以安装到 [homedir]/usr/libssh2

· Libssh2 - ./configure --prefix=[homedir]/usr/libssh2-1.7.0 ; make clean ; make -j 50 ; make install 

步骤3- 设置 php-ssl 桥接器,其源位于 [homedir]/software/ssh-0.12

· PHP-SSL 桥接器 - phpize534;./configure --with-ssh2=[homedir]/usr/libssh2-1.7.0 --with-php-config=[path to new php-config]/php-config ; make clean ; make -j 50 ; make install

相关内容