线上做事器php引用的curl扩展依赖的curl库版本是7.29.0,业务想升级到7.71以上版本,由于这个版本支持域名配置HOST,即做一个后台推送功能,在后台配置后,要推送到前端每台做事器上,前端做事器供应了一个只供内部访问的域名和接口用于更新配置,由于前端做事端有多台,以是须要配置相同的域名,但用不同的IP,假设前端接口地址为 www.abc.com/updateConfig,有以下机器:

172.21.107.36

172.21.107.35

phpcurl升级进级Php Curl扩大碰到的坑 GraphQL

则须要发送两次要求,第一次是向这个地址发送要求:www.abc.com/updateConfig,但www.abc.com要指向172.21.107.36;

第二次还是向www.abc.com/updateConfig发送要求,但www.abc.com要指向 172.21.107.35。

这里不谈论方案本身有利害,只讲述升级过程中碰着的问题及处理办法。

由于curl扩展是静态编译进PHP可实行文件的,因此须要重新下载新的curl库,这里不谈论细节了,可以在官网:https://curl.haxx.se/download.html

下载就行,大略的configure,在make && make install就行了,假设安装的curl目录为/usr/local/curl,则编译php时指定相应的目录就行:

./configure --prefix=/opt/php --with-config-file-path=/opt/php/etc --with-config-file-scan-dir=/opt/php/etc/php.d --enable-fpm --disable-opcache --disable-fileinfo --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif --enable-sysvsem --enable-inline-optimization --with-curl=/usr/local/curl --enable-mbregex --enable-mbstring --with-password-argon2 --with-sodium=/usr/local --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp --enable-intl --with-xsl --with-gettext --enable-zip --enable-soap --disable-debug

即上面的 --with-curl=/usr/local/curl

编译后实行代码结果还是老的版本:

php -r 'var_dump(curl_version());'

然后用objdump查看php文件引入的curl库的情形:

objdump -x /opt/php/bin/php|grep curl|grep NEEDED

创造引用库的版本为libcurl.so.4,然后创造这个文件是一个软链,指向/usr/lib64/libcurl.so.4.3.0

ll /usr/lib64/libcurl.so.4

通过搜索库里的字符串,创造版本号还是7.29,然后将/usr/lib64/libcurl.so.4指向/usr/lib64/libcurl.so.4.6.0,问题完美办理。