php get_headers timeout file_get_contents timeout 执行超时处理

1. get_headers() timeout超时处理

$urls = array(
	'http://www.php-php.com/',
	'http://www.163.com/',
	'http://php.xlxz.org.la/'
);

function xlxzUrl($url) {
	// 避免请求超时超过了PHP的执行时间

$executeTime = ini_get('max_execution_time');



	ini_set('max_execution_time', 0);
	$headers = @get_headers($url);
	ini_set('max_execution_time', $executeTime);
	if ($headers) {
		$head = explode(' ', $headers[0]);
		if (!empty($head[1]) && intval($head[1]) < 400)
			return true;
	}
}

foreach ($urls as $url) {
	if ( xlxzUrl( $url ) )
		echo $url . '有效' . '<br />';
	else
		echo $url . '无效' . '<br />';
}

2. get_headers() timeout 超时处理

 使用 stream_context_set_default() 函数 ( >php5.3 )


  1. stream_context_set_default(array(  

  2.   'http' => array(  

  3.       'timeout' => 1 //设置一个超时时间,timeout单位为秒  

  4.       )  

  5.   )  

  6. );  

  7. $headers = @get_headers( 'no.xlxz.org' );

3.  file_get_contents() timeout 超时处理

  1. $stream = stream_context_create(array(  

  2.   'http' => array(  

  3.       'timeout' => 1 //设置一个超时时间,timeout单位为秒  

  4.       )  

  5.   )  

  6. );  

  7. file_get_contents("http://xlxz.org/", 0, $strem);  


4. get_headers() timeout 超时处理使用CURL来达到相同功能


function get_headers_curl($url, $time = 15 )
{
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL,            $url);
     curl_setopt($ch, CURLOPT_HEADER,         true);
     curl_setopt($ch, CURLOPT_TIMEOUT,        $time );
     curl_setopt($ch, CURLOPT_NOBODY,         true);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

     $xlxz = curl_exec($ch);
     curl_close( $ch );
     $xlxz  = explode( "\n", $xlxz );
     return $xlxz;
}