php教程 php手册 PHP file_get_contents设置超时处理方法

PHP file_get_contents设置超时处理方法

Jun 06, 2016 pm 08:27 PM
file_get_contents 시간 초과 처리

今天说的这篇是讲超时的,确实在跨服务器提交的时候,不可避免的会遇到超时的情况,这个时候怎么办?set_time_limit是没有用的,只有用context中的timeout时间来

file_get_contents的超时处理

话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。

今天说的这篇是讲超时的,确实在跨服务器提交的时候,不可避免的会遇到超时的情况,这个时候怎么办?set_time_limit是没有用的,只有用context中的timeout时间来控制。相反,我们不是要抑止,而是要管理。比如在超时返回错误后,进行一次尝试,就象js中的 settimeout那样,对函数重新处理。错误超过3次或者5次后,我们就确实的认为无法连接服务器而彻底放弃。这,是一个好办法,应该值得推荐使用。其实。不全是file_get_contents,只要支持context的都应该加上,,避免超时浪费时间。这样可以被支持的函数大致有:fsocketopen(该函数的最后一个参数。好象比较推荐在读stream的时候,使用stream_time_out函数进行控制),fopen(也是从PHP5开始加入context支持),file(PHP5加入支持),curl(curl有自已的变量 CURLOPT_TIMEOUT)等 。

在使用file_get_contents函数的时候,经常会出现超时的情况,在这里要通过查看一下错误提示,看看是哪种错误,比较常见的是读取超 时,这种情况大家可以通过一些方法来尽量的避免或者解决。这里就简单介绍两种:

一、增加超时的时间限制

这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时 间。

我一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的。真正的修改 file_get_contents延时可以用resource $context的timeout参数:

复制代码 代码如下:


$opts = array(  
  'http'=>array(  
    'method'=>"GET",  
    'timeout'=>1,//单位秒 
   )  
);   

 $cnt=0;  
while($cntecho $cnt;  
echo $bb; 

二、一次有延时的话那就多试几次

有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失 败将返回 FALSE,所以可以下面这样编写代码:

复制代码 代码如下:


$cnt=0;  
 while($cnt

以上方法对付超时已经OK了。那么Post呢?细心点有人发现了'method'=>”GET”, 对!是不是能设置成post呢?百度找了下相关资料,还真可以!而且有人写出了山寨版的post传值函数,如下:

复制代码 代码如下:


function Post($url, $post = null){  
    $context = array ();  
    if (is_array ( $post )) {  
        ksort ( $post );  
        $context ['http'] = array (  
            'timeout' => 60,   
            'method' => 'POST',   
            'content' => http_build_query( $post, '', '&' )  
         );  

    }  
    return file_get_contents ( $url, false, stream_context_create ( $context ) );  
}  

 $data = array (  
    'name' => 'test',  
    'email' => 'admin@admin.com',  
    'submit' => 'submit',  
);  
echo Post ( 'http://www.jb51.net', $data ); 

OK , 上面函数完美了,既解决了超时控制又解决了Post传值。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

如何解决PHP 경고: file_get_contents(): 스트림을 열지 못했습니다: HTTP 요청이 실패했습니다. 如何解决PHP 경고: file_get_contents(): 스트림을 열지 못했습니다: HTTP 요청이 실패했습니다. Aug 18, 2023 pm 11:34 PM

如何解决PHP 경고: file_get_contents(): 스트림을 열지 못했습니다: HTTP 요청이 실패했습니다.

PHP 경고 해결 방법: file_get_contents(): 파일 이름은 비워둘 수 없습니다. PHP 경고 해결 방법: file_get_contents(): 파일 이름은 비워둘 수 없습니다. Aug 18, 2023 pm 07:30 PM

PHP 경고 해결 방법: file_get_contents(): 파일 이름은 비워둘 수 없습니다.

PHP의 file_get_contents() 함수: 파일에서 내용을 읽는 방법 PHP의 file_get_contents() 함수: 파일에서 내용을 읽는 방법 Nov 04, 2023 pm 01:43 PM

PHP의 file_get_contents() 함수: 파일에서 내용을 읽는 방법

PHP 파일 캐싱 기능에 대한 자세한 설명: file_get_contents, file_put_contents, unlink 및 기타 기능의 파일 캐싱 처리 방법 PHP 파일 캐싱 기능에 대한 자세한 설명: file_get_contents, file_put_contents, unlink 및 기타 기능의 파일 캐싱 처리 방법 Nov 18, 2023 am 09:37 AM

PHP 파일 캐싱 기능에 대한 자세한 설명: file_get_contents, file_put_contents, unlink 및 기타 기능의 파일 캐싱 처리 방법

PHP 함수 소개—file_get_contents(): URL 내용을 문자열로 읽어옵니다. PHP 함수 소개—file_get_contents(): URL 내용을 문자열로 읽어옵니다. Jul 24, 2023 pm 02:32 PM

PHP 함수 소개—file_get_contents(): URL 내용을 문자열로 읽어옵니다.

PHP 및 WebDriver 확장: 웹 페이지 로드 시간 초과 및 실패를 처리하는 방법 PHP 및 WebDriver 확장: 웹 페이지 로드 시간 초과 및 실패를 처리하는 방법 Jul 08, 2023 pm 12:21 PM

PHP 및 WebDriver 확장: 웹 페이지 로드 시간 초과 및 실패를 처리하는 방법

Golang의 오류 처리: 시간 초과 오류를 처리하는 방법은 무엇입니까? Golang의 오류 처리: 시간 초과 오류를 처리하는 방법은 무엇입니까? Aug 07, 2023 pm 01:17 PM

Golang의 오류 처리: 시간 초과 오류를 처리하는 방법은 무엇입니까?

PHP에서 file_get_contents 함수를 사용하여 파일 내용을 읽는 방법 PHP에서 file_get_contents 함수를 사용하여 파일 내용을 읽는 방법 Jun 26, 2023 pm 12:01 PM

PHP에서 file_get_contents 함수를 사용하여 파일 내용을 읽는 방법

See all articles