zoukankan      html  css  js  c++  java
  • 不支持fsockopen,culr支持,下ucenter 与modoer通讯问题

    简介:这是不支持fsockopen,culr支持,下ucenter 与modoer通讯问题的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=343925' scrolling='no'>

        网站上线,modoer与ucenter 下不能通讯折腾了我差不多二天,开始都以为自己的配置出问题,移植了平台后就不能通讯了,修改了几次配置,都没有成功,所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的L1主机不支持fsockopen,在文件uc_client/client.php中的uc_fopen中出现了问题,这里的代码是这样:

    function uc_fopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {
     $return = '';
     $matches = parse_url($url);
     !isset($matches['host']) && $matches['host'] = '';
     !isset($matches['path']) && $matches['path'] = '';
     !isset($matches['query']) && $matches['query'] = '';
     !isset($matches['port']) && $matches['port'] = '';
     $host = $matches['host'];
     $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
     $port = !empty($matches['port']) ? $matches['port'] : 80;
     if($post) {
      $out = "POST $path HTTP/1.0\r\n";
      $out .= "Accept: */*\r\n";
      //$out .= "Referer: $boardurl\r\n";
      $out .= "Accept-Language: zh-cn\r\n";
      $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
      $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
      $out .= "Host: $host\r\n";
      $out .= 'Content-Length: '.strlen($post)."\r\n";
      $out .= "Connection: Close\r\n";
      $out .= "Cache-Control: no-cache\r\n";
      $out .= "Cookie: $cookie\r\n\r\n";
      $out .= $post;
     } else {
      $out = "GET $path HTTP/1.0\r\n";
      $out .= "Accept: */*\r\n";
      //$out .= "Referer: $boardurl\r\n";
      $out .= "Accept-Language: zh-cn\r\n";
      $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
      $out .= "Host: $host\r\n";
      $out .= "Connection: Close\r\n";
      $out .= "Cookie: $cookie\r\n\r\n";
     }
     $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
     if(!$fp) {
      return '';//note $errstr : $errno \r\n
     } else {
      stream_set_blocking($fp, $block);
      stream_set_timeout($fp, $timeout);
      @fwrite($fp, $out);
      $status = stream_get_meta_data($fp);
      if(!$status['timed_out']) {
       while (!feof($fp)) {
        if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")) {
         break;
        }
       }

       $stop = false;
       while(!feof($fp) && !$stop) {
        $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
        $return .= $data;
        if($limit) {
         $limit -= strlen($data);
         $stop = $limit <= 0;
        }
       }
      }
      @fclose($fp);
      return $return;
     }
    }

    fsockopen函数不能使用,因些就只能靠其它方法了,幸亏支持curl,file_get_contents也支持,经考虑就用curl吧,修改了uc_fopen函数,如下;

    function uc_fopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {
       $return = '';
          $curl = curl_init();   
          curl_setopt($curl, CURLOPT_URL, $url);   
          curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
          if($post) {   
          curl_setopt($curl, CURLOPT_POST, 1);   
          curl_setopt($curl, CURLOPT_POSTFIELDS, $post);   
          }   
       if($cookie) {   
          curl_setopt($curl, CURLOPT_COOKIE, $cookie);   
          } 
      curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);   
         curl_setopt($curl, CURLOPT_HEADER, 0);   
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   
         $return = curl_exec($curl);   
        if (curl_errno($curl)) {   
           echo '<pre><b>错误:</b><br />'.curl_error($curl);   
         }   
         curl_close($curl);   
         return $return;   

    }

    于是modoer下的uc_client/client.php和uchome下的uc_cilent/client.php,就这样修改了uc_open函数,呵呵,第一次使用curl,网上的资料还是好多的,所以也没有什么阻碍,不过就不知这个修改会不会影响其它的东西,还有待测试罗。。。。

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/343925.html pageNo:5
  • 相关阅读:
    [ASP.NET]c#利用WebClient和WebRequest类获得网页源代码
    远程重启、关闭电脑命令、远程重启计算机命令。
    SQL SERVER 2005转换为SQL2000数据库,生成脚本及导出数据全过程
    Winform,C#,listView判断鼠标点击是行还是listView的空白区
    前端MVC Vue2学习总结(八)——前端路由
    JavaSE学习总结(一)——Java基础
    开区间覆盖的约简
    流形上的微积分 习题 1.18
    王昆扬老师发来的材料:关于实数的构造
    连续函数注记
  • 原文地址:https://www.cnblogs.com/ooooo/p/2241959.html
Copyright © 2011-2022 走看看