> 백엔드 개발 > PHP 튜토리얼 > PHP stream_set_timeout有什么用

PHP stream_set_timeout有什么用

PHPz
풀어 주다: 2020-09-05 09:31:44
원래의
3332명이 탐색했습니다.

在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中文网

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿