- 论坛徽章:
- 0
|
问题一: 在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 |
|