文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何解决Nginx下UCenter通讯失败的问题

2024-04-02 19:55

关注

本篇文章给大家分享的是有关如何解决Nginx下UCenter通讯失败的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

解决Nginx下,UCenter通讯失败的问题。  

现象

最后还是“通信失败”,不过跟踪ucenter的代码,在uc_server/model/misc.php的dfopen()函数中,有如下代码:

if(!$fp = @fsocketopen(($scheme == 'https' ? 'ssl' : $scheme).'://'.($scheme == 'https' ? $host : ($ip ? $ip : $host)), $port, $errno, $errstr, $timeout)) {
     $context = array(
        'http' => array(
           'method' => $post ? 'POST' : 'GET',
           'header' => $header,
           'content' => $post,
           'timeout' => $timeout,
        ),
     );
     $context = stream_context_create($context);
     $fp = @fopen($scheme.'://'.($scheme == 'https' ? $host : ($ip ? $ip : $host)).':'.$port.$path, 'b', false, $context);

在if条件内设置断点,即调用fsocketopen()函数失败的时候,此时查看$errstr变量的内容,其值如下:

Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?

原因

查看fsocketopen函数的代码:

function fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) {
     $fp = '';
     if(function_exists('fsockopen')) {
        $fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout);
     } elseif(function_exists('pfsockopen')) {
        $fp = @pfsockopen($hostname, $port, $errno, $errstr, $timeout);
     } elseif(function_exists('stream_socket_client')) {
        $fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout);
     }
     return $fp;
  }

发现其是调用的fsockopen()函数失败,在网上查找,发现大多数都是说fsockopen()函数不支持“http://”这样的host前缀,要直接用网址,类似www.163.com,或者localhost这样的。

解决

按照网上的说法,我临时修改代码如下:

if(!$fp = @fsocketopen('localhost', $port, $errno, $errstr, $timeout)) {
  //if(!$fp   = @fsocketopen(($scheme == 'https' ? 'ssl' : $scheme).'://'.($scheme ==   'https' ? $host : ($ip ? $ip : $host)), $port, $errno, $errstr, $timeout)) {
     $context = array(
        'http' => array(
           'method' => $post ? 'POST' : 'GET',
           'header' => $header,
           'content' => $post,
           'timeout' => $timeout,
        ),
     );
     $context = stream_context_create($context);
     $fp = @fopen($scheme.'://'.($scheme == 'https' ? $host : ($ip ? $ip : $host)).':'.$port.$path, 'b', false, $context);
     $fpflag = 1;
  }

暂时直接将第一个参数固定为localhost,重新刷新页面,终于通信成功:

如何解决Nginx下UCenter通讯失败的问题                                             

知道了真正原因,将上述的临时代码用正确的方式修改就很简单了,这里就不浪费笔墨了。

以上就是如何解决Nginx下UCenter通讯失败的问题,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯