Назад | Перейти на главную страницу

Обновленный cURL не действует в PHP

У меня есть приложение, работающее через Docker, основанное на официальный образ PHP Docker.

Я расширил его до обновления cURL и заставить его работать с nghttp2 и openssl, что мне нужно для поддержки HTTP / 2 в моем приложении.

Однако сам PHP не отражает изменений, и я не знаю почему.

Вот мой Dockerfile:

FROM php:7.0.3-fpm

# Add sources that allow installation of unstable packages (needed for latest OpenSSL/cURL versions).
RUN echo 'deb http://ftp.uk.debian.org/debian testing main contrib \n\
deb-src http://ftp.uk.debian.org/debian testing main contrib \n\
deb http://ftp.debian.org/debian/ jessie-updates main contrib \n\
deb-src http://ftp.debian.org/debian/ jessie-updates main contrib \n\
deb http://security.debian.org/ jessie/updates main contrib \n\
deb-src http://security.debian.org/ jessie/updates main contrib' > /etc/apt/sources.list \
&& apt-get update

# Install OpenSSL, nghttp2 and cURL (required to make HTTP/2 requests).
RUN apt-get install -y openssl nghttp2 curl

# Install other dependencies.
RUN apt-get install -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libpng12-dev \
&& docker-php-ext-install pdo_mysql mbstring sockets zip bcmath \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd

# Copy custom PHP.ini
COPY php.ini /usr/local/etc/php/

# Run php-fpm.
CMD ["php-fpm"]

curl --version выходы:

curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.9 zlib/1.2.8 libidn/1.29 libssh2/1.4.3 nghttp2/1.7.1 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets

openssl version выходы:

OpenSSL 1.0.2f  28 Jan 2016

Тем не мение, php -i выходы:

curl

cURL support => enabled
cURL Information => 7.38.0
Age => 3
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => No
GSSAPI => Yes
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps,     ldap, ldaps, pop3, pop3s, rtmp, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host => x86_64-pc-linux-gnu
SSL Version => OpenSSL/1.0.1k
ZLib Version => 1.2.8
libSSH Version => libssh2/1.4.3

Обратите внимание, что cURL Information показывает неправильный номер версии curl, и HTTP2 отмечен как no.

Любые предложения о том, как заставить PHP поднять это, будут сильно оценил!

Для всех, кто задумывается об этом в будущем, в конце концов, я нашел способ сделать это. Я в основном создал свой собственный образ Docker, основанный на официальный PHP один, который загрузил новую версию cURL перед компиляцией.

Это доступно на Докер хаб (по крайней мере, для PHP 7, работающего через FPM).