资讯专栏INFORMATION COLUMN

Ubuntu 下 PHP curl https 段错误(或者nginx502)

hzc / 1322人阅读

摘要:然后搜索关键词,如下图所示然后也可以通过来查看段错误,首先,开启选项然后,运行生成文件,然后在当前目录会生成文件,用以下命令查看的内容这是显示结果注意到最后一行了吗,提示我们有问题。

昨天下午在日常写代码的时候遇到一个问题。就是在调用curl_exec()后出现502。然后马上编写了一个测试脚本:


发现,只要链接是https的,必然出现段错误,这也是导致502的原因。而http链接可以正常访问。

php[15304]: segfault at 7f43cf4b7c00 ip 00007f43cf4b7c00 sp 00007ffda84c57d8 error 15 in libssl.so.1.1[7f43cf4b4000+4000]

上面的日志是我通过系统的日志程序来查看的,我用的是Linux Mint操作系统,打开方式为:菜单->日志。然后搜索关键词php,如下图所示:

然后也可以通过gdp来查看段错误,

首先,开启dump选项

ulimit -c unlimited 

然后,运行PHP生成core文件,

php test.php

然后在当前目录会生成core文件,用以下命令查看dump的内容:

gdb php -c core

这是显示结果:

GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from php...done.
[New LWP 11242]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `php test.php".
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fe27bd51c00 in ?? () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1

注意到最后一行了吗,提示我们libssl有问题。

解决问题的灵感从这里来的:
https://bugs.php.net/bug.php?...

也有人出现了相同的问题,官方提示说是系统curl使用的ssl库和php编译时使用的ssl库(opsnssl)不一至导致的。然后我查找了phpinfo信息,发现php使用的curl版本以及它使用的ssl库(openssl)版本:

然后查看PHP编译时的openssl版本:

这两个软件的openssl版本明显不一致,所以,下一步就是要么从新编译PHP,使用系统的openssl版本1.1.0g,要么重新编译安装curl,使用openssl版本1.0.2o,我选择了后者。

下面是安装新版curl的过程。

首先下载新版curl

wget https://curl.haxx.se/download/curl-7.62.0.tar.gz

然后解压并安装

tar vxzf curl-7.62.0.tar.gz
cd curl-7.62.0
sudo ./configure --with-ssl=/usr/local/openssl --prefix=/usr/local #php的openssl在这个目录,所以指定这个
sudo make
sudo make install

然后从新打开一个terminal

curl -V
curl 7.62.0 (x86_64-pc-linux-gnu) libcurl/7.62.0 OpenSSL/1.0.2o zlib/1.2.11
Release-Date: 2018-10-31
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy

发现系统的curl版本已经升级成功,并且openssl的版本也是希望的版本。

然后我们再运行测试文件,

➜  tests php test.php                
php: /usr/local/lib/libcurl.so.4: no version information available (required by php) #这个是新问题



    
    
    
    
    
    
    
    
    
    
    百度一下,你就知道
    
    
    
    
    
    
    

发现可以获取https的内容了。


解决这个问题:

php: /usr/local/lib/libcurl.so.4: no version information available (required by php) #这个是新问题

解决方式
第一,把/usr/bin里的curlcurl-config替换为/usr/local/bin下的对应文件

sudo rm -rf /usr/bin/curl*
sudo ln -s /usr/local/bin/curl /usr/bin/curl
sudo ln -s /usr/local/bin/curl-config /usr/bin/curl-config

第二,由于我用的是lnmp1.5一键安装包,所以,我重新安装了下php。这个问题的原因是php在编译的时候得到的libcurl版本是以前系统的版本,现在libcurl升级了,所以对于php来说版本信息就消失了,所以我们只需要重新安装一遍php:

cd lnmp1.5
sudo ./upgrade

这里会提示你输入要升级哪个软件,你选择PHP。

然后会提示你输入PHP版本号,你输入5.6.38。

最后按回车即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29700.html

相关文章

  • PHP开发环境01 - Mac使用Docker配置PHP环境(只限于学习)

    视频地址 学徒卡夫 - 卡夫的Mac 03 - Mac下使用Docker配置PHP环境 https://www.bilibili.com/vide... 安装 Docker https://www.docker.com/docker... 下载镜像 # 安装基础镜像 - ubuntu:14.04 # 拉取镜像(拉取镜像经常会失败,尝试几次就好了) docker pull ubuntu:14.0...

    gitmilk 评论0 收藏0
  • PHP开发环境01 - Mac使用Docker配置PHP环境(只限于学习)

    视频地址 学徒卡夫 - 卡夫的Mac 03 - Mac下使用Docker配置PHP环境 https://www.bilibili.com/vide... 安装 Docker https://www.docker.com/docker... 下载镜像 # 安装基础镜像 - ubuntu:14.04 # 拉取镜像(拉取镜像经常会失败,尝试几次就好了) docker pull ubuntu:14.0...

    baukh789 评论0 收藏0
  • Yii系列(1)打造虚拟开发环境及Yii的安装配置

    摘要:我下载到了本机上与打通的文件夹中,再进入,执行以下命令用代号取代的发行版本代号,本系统是所以代号为通过执行,在文件尾部中添加,以下代码保存,相关编辑操作请谷歌。安装的前提是,已经安装成功。 最近因为工作开始接触Yii,之前开发使用laravel习惯用vagrant。所以,这次尝试着打造一个box,专门用来写Yii框架的项目。 在这次打造box,收获了很多:1)更加熟悉了nginx的配...

    shleyZ 评论0 收藏0
  • Tengine2.1.0 PHP5.6.8 Nodejs 的编译安装和配置

    摘要:执行时,可能会报各种依赖包不存在的提示,比如,如果是开发环境或者对这些依赖程序的版本没有要求的话,可以直接通过的方式安装这些依赖包。新建一个文件写入这样的话,如果以后我们不需要扩展时,可以直接删除配置文件即可。 淘宝Tengine的编译安装 Tengine的官网:http://tengine.taobao.org/ 下载源码包 wget http://tengine.taobao...

    TesterHome 评论0 收藏0

发表评论

0条评论

hzc

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<