Сбой компиляции PHP 5.3.29 с OpenSSL

нам нужна установка PHP5.3 на нашем сервере Ubuntu 16.04 для устаревшего стороннего приложения, которое мы собираемся заменить, но нам еще нужно какое-то время.

Поэтому я скомпилировал PHP5.3.29 с FPM, чтобы заставить его работать с нашим стеком Nginx. Однако мне сложно компилировать 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 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

Итак, я просмотрел web, чтобы найти исправление для этой ошибки, но не удалось найти те, которые мне удалось найти. Однако в одном сообщении, на которое я натолкнулся, упоминалось, что с помощью более старой версии OpenSSL проблему можно обойти.

Использование системной установки 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

Итак, я просмотрел web, чтобы найти исправление этой ошибки, но не удалось найти те, которые мне удалось найти. Однако в одном сообщении, на которое я натолкнулся, упоминалось, что с помощью более старой версии OpenSSL проблему можно обойти. Вот что я пробовал.

Используя самокомпилированную старую версию OpenSSL (v 0.9.8w)

, я скомпилировал OpenSSL с флагом - prefix = / opt / openssl , чтобы убедиться, что это не так. Не мешает системной установке OpenSSL. После этого я снова попытался скомпилировать PHP, используя - with-openssl = / opt / openssl , и все прошло гладко.

Однако после выполнения некоторых тестов с использованием приложения, которое требовало PHP 5.3, я быстро начал видеть FPM-Child, который обслуживал мой запрос segfaulting при использовании cURL-запросов с URL-адресами https. Итак, я отладил неисправный дочерний элемент и смог отследить причину до OpenSSL. Хорошо - что теперь делать?

Компиляция PHP вообще без OpenSSL

Итак, я решил полностью опустить расширение OpenSSL и на самом деле добился успеха как при компиляции (здесь неудивительно), так и при запросе URL-адресов https через curl с использованием PHP установку Я только что скомпилировал. Я подумал, что все хорошо, но это не так (тоже неудивительно): после некоторого запуска приложения выяснилось, что оно широко использует вызовы file_get_contents () в сочетании с URL-адресами https. Все они терпят неудачу, потому что PHP не поддерживает поток https из-за отсутствия расширения OpenSSL.

Итак, я не знаю, что делать дальше, и надеюсь, что вы могли бы подтолкнуть меня в правильном направлении.

К вашему сведению, вот конфигурация, которую я использовал для компиляции (с разными значениями --with-openssl param):

./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

Большое спасибо!

2
задан 3 February 2017 в 09:19
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- путь к файлу = [домашний адрес] / usr / php5329; очистить; 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 -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 = [путь к новому php-config] / php-config; очистить; make -j 50; make install

1
ответ дан 3 December 2019 в 12:37

Теги

Похожие вопросы