使用fsockopen去连接一个url,并模拟提交表单,贴下主要代码:
$urlArray = parse_url ( $this->url );
$fp = fsockopen ( $urlArray ['host'], $this->port );
$requestData = $this->buildRequest ();
fwrite ( $fp, $requestData );
$content = "";
while ( $data = fread ( $fp, 4096 ) ) {
$content .= $data;
}
fclose ( $fp );
$this->response = trim ( stristr ( $content, "\r\n\r\n" ), "\r\n" );
结果总是要等待一分钟才返回,无论什么情况下总是等待60秒,不多不少,于是逐行debug,发现问题出在
while ( $data = fread ( $fp, 4096 ) ) {
$content .= $data;
}
这里,等待就发生这个fread里面。
查了很多资料,找到解决办法:
while(!feof($fp)){
stream_set_timeout($fp, 2);
$content .= fread($fp, 1024);
$info = stream_get_meta_data($fp);
if ($info['timed_out']) {
break;
}
}