不存在的IP网址,会一直等待响应,直到函数超时,导致页面迟迟无法显示。failed to open stream: HTTP request failed!
Fatal error: Maximum execution time of 30 seconds exceeded 设置了 ini_set('max_execution_time', 10);还一样要不不用这个函数自己写socket了,用这个函数的curl_init,麻烦,各位有啥别好的方法没
Fatal error: Maximum execution time of 30 seconds exceeded 设置了 ini_set('max_execution_time', 10);还一样要不不用这个函数自己写socket了,用这个函数的curl_init,麻烦,各位有啥别好的方法没
set_time_limit(5)这样用的话,程序就直接停止了
最后一个参数 $timeout设为5,即可设置最大连接时间5秒,过期函数返回,程序并不会退出
由于不能给自己分,我用另外的账号登陆了,以下是完整代码,也给别人做做贡献了
function DoGet($url)
{
$url2 = parse_url($url);
if(!isset($url2['path']))$url2['path']='';
$url2["path"] = ($url2["path"] == "" ? "/" : $url2["path"]);
$url2["port"] = (isset($url2["port"])?$url2["port"]:80);
$host_ip = @gethostbyname($url2["host"]);
$fsock_timeout =2; //2 second
if(!($fsock = fsockopen($host_ip, $url2["port"], $errno, $errstr, $fsock_timeout)))
{
// echo 'fsockopen fail';
return false;
}
$request = $url2["path"] .(isset($url2["query"]) ? "?".$url2["query"] : "");
$in = "GET " . $request . " HTTP/1.0\r\n";
$in .= "Accept: */*\r\n";
$in .= "User-Agent: Payb-Agent\r\n";
$in .= "Host: " . $url2["host"] . "\r\n";
$in .= "Connection: Close\r\n\r\n";
stream_set_timeout( $fsock , $fsock_timeout ) ;
if(!@fwrite($fsock, $in, strlen($in))){
//echo 'fwrite fail';
fclose($fsock);
return false;
}
$status = stream_get_meta_data( $fsock ) ;
//发送数据超时
if($status['timed_out'] )
{
// echo "Write time out" ;
fclose( $fsock );
return false;
}
$out = null;
while($buff = @fgets($fsock, 2048))
{
$out .= $buff;
//只读取头部信息
if(false!==strpos($out, "\r\n\r\n"))break;
}
$status = stream_get_meta_data( $fsock ) ;
//读取数据超时
if( $status['timed_out'] )
{
// echo "Read time out" ;
fclose( $fsock );
return false;
}
fclose($fsock);
$pos = strpos($out, "\r\n\r\n");
$head = substr($out, 0, $pos); //http head
return $head;
}
$rs= DoGet("http://www.ba05afasdfsiddf08usfa.com");
if(!$rs)echo 'fail';
else echo $rs;