免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1421 | 回复: 0
打印 上一主题 下一主题

php socket超时问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-27 11:53 |只看该作者 |倒序浏览

问题一:  在Windows下fsockopen超时问题。 看下面部分代码:
   
     $fp = fsockopen("192.168.1.127", 6800);
     if (!$fp)
     {
       die("alert('连接服务失败!');window.opener=null; window.close();");
     }

   
    fputs($fp, "test php");
    fclose($fp);
   ?>
   
   如果连接失败,不会弹出窗口,只显示下面信息:
Warning: fsockopen() [
function.fsockopen
]: unable to connect to 192.168.1.127:6800

in D:\lif\php\process\p_cfg_map_query.php on line 18
Fatal error: Maximum execution time of 30 seconds exceeded in D:\lif\php\process\p_cfg_map_query.php on line 18
如果把$fp = fsockopen("192.168.1.127", 6800); 改为 $fp = fsockopen($sip, $sport, &$err_no, &$err_str, 10);

问题就解决了哦

问题二:  feof超时问题。


  
   $fp = fsockopen("192.168.1.127", 6800, &$err_no, &$err_str, 10);

  if (!$fp)
  {  
     die("alert('连接服务失败!');window.opener=null;  window.close();");
  }


  fwrite($fp, "test");
  $ret  = "\n";
   
  while(!feof($fp))
  {
     $ret .= fread($fp, 1024);
  }
  echo $ret;
  fclose($fp);
?>

上面程序老是出错,如下面信息
Fatal   error:   Maximum   execution   time   of   30   seconds   exceeded   

把 while(!feof($fp))
  {

    $ret .= fread($fp, 1024);
  }

代码改为下面的代码就解决问题了

  while(!feof($fp))
  {
    stream_set_timeout($fp, 2);
    $ret .= fread($fp, 1024);
    $info = stream_get_meta_data($fp);
    if ($info['timed_out']) {
      break;
    }
  }

主要是没有处理超时退出问题哦。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50355/showart_484815.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP