Home >Backend Development >PHP Tutorial >PHP stream_set_timeout有什么用

PHP stream_set_timeout有什么用

PHPz
PHPzOriginal
2016-06-06 20:09:443341browse

在PHP中,函数stream_set_timeout作用于读取流时的时间控制,并且stream_set_timeout需要配合stream_get_meta_data才能使用。

PHP stream_set_timeout有什么用

PHP stream_set_timeout有什么用?

PHP函数stream_set_timeout(Stream Functions)作用于读取流时的时间控制。fsockopen函数的timeout只管创建连接时的超时,对于连接后读取流时的超时,则需要用到 stream_set_timeout函数。

由于国内的网络环境不是很稳定,尤其是连接国外的时候,不想程序出现Fatal error: Maximum execution time of 30 seconds exceeded in …的错误,该函数尤其有用。

stream_set_timeout需配合stream_get_meta_data使用,如果没有timeout, stream_get_meta_data返回数组中time_out为空,反之为1,可根据此判断是否超时。另外由于PHP默认的Maximum execution time为30秒,这是一次执行周期的时间,为了不出现上述的Fatal error,还需要设置一个总的读取流的时间,具体方法参见下面详细代码。

$server="www.yahoo.com";  
$port = 80;  
  
$data="GET / HTTP/1.0rn";  
$data.="Connection: Closern";  
$data.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)rnrn";  
  
$start_time = time();  
$fp=fsockopen($server, $port, $errno, $errstr, 5);  
if (!$fp) {  
die("Connect Timeout.n");  
} else {  
stream_set_blocking($fp, True);  
stream_set_timeout($fp, 3);  
  
fputs($fp, "$data");  
while (!feof($fp)) {  
$text .= fread($fp, 2000);  
  
$diff = time() - $start_time;  
if ($diff > 24) {  
die("Timeout!n");  
}  
  
$status = stream_get_meta_data($fp);  
if ($status[’timed_out’]) {  
die("Stream Timeout!n");  
}  
}  
}  
  
fclose($fp);

更多相关知识,请访问PHP中文网

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn