我们需要在我们的Ubuntu 16.04服务器上安装一个PHP5.3,用于我们将要replace的传统第三方应用程序,但是我们仍然需要一段时间。
因此,我使用FPM编译了PHP5.3.29,以使其与我们的Nginx堆栈一起工作。 但是,我正在努力编译OpenSSL到PHP。 所以这就是我迄今所做的:
使用OpenSSL的系统安装(v 1.0.1j)
尝试使用--with-openssl编译PHP失败,运行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
所以我search了networking,find了这个错误的修复方法,但是却找不到我能find的那个方法。 然而,我遇到的一篇文章提到,通过使用较旧版本的OpenSSL,问题可以被绕开。 这就是我所尝试的。
使用自编旧版本的OpenSSL(v 0.9.8w)
我使用flag --prefix=/opt/openssl编译了OpenSSL,以确保它不会影响OpenSSL的系统安装。 之后,我尝试使用--with-openssl=/opt/openssl再次编译PHP,并顺利进行。
然而,在使用需要PHP 5.3的应用程序运行一些testing之后,当使用带https https URL的cURL请求时,我迅速开始看到正在为我的请求提供服务的FPM-Child。 所以我debugging了这个有故障的孩子,并且能够把原因追溯到OpenSSL。 好 – 现在该怎么办?
编译没有OpenSSL的PHP
所以我决定完全省略OpenSSL扩展,实际上在编译时都是成功的(这里没有什么惊喜),并且使用我刚刚编译的PHP安装,通过curl请求https url。 我认为所有的东西都是好的,但是并没有(也没有意外):在运行了一段时间之后,事实certificate,它大量地使用了与https url相结合的file_get_contents()调用。 这些都失败了,因为PHP缺lesshttpsstream支持,因为缺lessOpenSSL扩展。
所以在这里我不知道接下来该做什么,我希望你能给我一个正确的方向。
只是供参考这里是我用于编译的configuration(与–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
非常感谢!