专栏首页程序员升级之路升级Php Curl扩展遇到的坑

升级Php Curl扩展遇到的坑

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

172.21.107.36

172.21.107.35

则需要发送两次请求,第一次是向这个地址发送请求: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,问题完美解决。

本文分享自微信公众号 - 程序员升级之路(gh_1fab42db66cb),作者:刘江华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Raft算法之快照篇

    快照(snapshot)是最简单的压缩方式。在快照中,全部的当前系统状态都被写入到快照中,存储到持久化的存储中,然后在那个时刻之前的全部日志都可以被丢弃。

    心平气和
  • Centos编译JDK8源码

    开发机配置如下:Linux内核是2.6,Centos版本为6.9,应该差异不大。

    心平气和
  • Skywalking Php系统一:介绍&安装

    如果没有什么工具, 我们能做的是在服务器上找日志,做分析;如果机器比较多,还得一台一台定位和分析,效率低而且难度较高。

    心平气和
  • WSL 快速搭建 LNMP 环境

    Windows Subsystem for Linux(简称 WSL )是一个为在 Windows 10 上能够原生运行 Linux 二进制可执行文件(ELF ...

    康怀帅
  • 如何在centos8自定义目录安装php7.3

    # 官网地址:https://www.php.net/downloads.php wget https://www.php.net/distributions...

    砸漏
  • 【CentOS】Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

    Eller
  • Centos7安装PHP及Nginx的教程详解

    随着服务端centos的应用越来越普及,centos7的使用也越来越多,这两年来我从一个很少接触centos服务器端维护的小白,也越来越多的基础其维护操作,给我...

    砸漏
  • centos6.6 下 安装 php7 + nginx环境的方法

    本文实例讲述了centos6.6 下 安装 php7 + nginx环境的方法。分享给大家供大家参考,具体如下:

    砸漏
  • Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

    常规的PHP配置方式有很多种,例如CGI、fast-cgi、apache module handle、cli、isapi这些。 CGI (通用网关接口 / Co...

    96php.cn
  • CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境

    http://www.osyunwei.com/archives/10003.html

    砸漏

扫码关注云+社区

领取腾讯云代金券