四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

PHP file_get_contents設置超時處理方法

file_get_contents的超時處理

話說,從php5開始,file_get_content已經(jīng)支持context了(手冊上寫著:5.0.0 Added the context support. ),也就是說,從5.0開始,file_get_contents其實也可以POST數(shù)據(jù)。

今天說的這篇是講超時的,確實在跨服務器提交的時候,不可避免的會遇到超時的情況,這個時候怎么辦?set_time_limit是沒有用的,只有用context中的timeout時間來控制。相反,我們不是要抑止,而是要管理。比如在超時返回錯誤后,進行一次嘗試,就象js中的 settimeout那樣,對函數(shù)重新處理。錯誤超過3次或者5次后,我們就確實的認為無法連接服務器而徹底放棄。這,是一個好辦法,應該值得推薦使用。其實。不全是file_get_contents,只要支持context的都應該加上,避免超時浪費時間。這樣可以被支持的函數(shù)大致有:fsocketopen(該函數(shù)的最后一個參數(shù)。好象比較推薦在讀stream的時候,使用stream_time_out函數(shù)進行控制),fopen(也是從php5開始加入context支持),file(php5加入支持),curl(curl有自已的變量 CURLOPT_TIMEOUT)等 。

在使用file_get_contents函數(shù)的時候,經(jīng)常會出現(xiàn)超時的情況,在這里要通過查看一下錯誤提示,看看是哪種錯誤,比較常見的是讀取超 時,這種情況大家可以通過一些方法來盡量的避免或者解決。這里就簡單介紹兩種:

一、增加超時的時間限制

這里需要注意:set_time_limit只是設置你的php程序的超時時間,而不是file_get_contents函數(shù)讀取URL的超時時 間。

我一開始以為set_time_limit也能影響到file_get_contents,后來經(jīng)測試,是無效的。真正的修改 file_get_contents延時可以用resource $context的timeout參數(shù):

復制代碼 代碼如下:
$opts = array(  
  'http'=>array(  
    'method'=>"GET",  
    'timeout'=>1,//單位秒 
   )  
);   

 $cnt=0;  
while($cnt<3 && ($bb=file_get_contents("http://www.jb51.NET", false, stream_context_create($opts)))===FALSE) $cnt++;  
echo $cnt;  
echo $bb; 

二、一次有延時的話那就多試幾次

有時候失敗是因為網(wǎng)絡等因素造成,沒有解決辦法,但是可以修改程序,失敗時重試幾次,仍然失敗就放棄,因為file_get_contents()如果失 敗將返回 FALSE,所以可以下面這樣編寫代碼:

復制代碼 代碼如下:
$cnt=0;  
 while($cnt<3 && ($bb=file_get_contents("http://www.jb51.NET", false, stream_context_create($opts)))===FALSE) $cnt++;

以上方法對付超時已經(jīng)OK了。那么Post呢?細心點有人發(fā)現(xiàn)了'method'=>”GET”, 對!是不是能設置成post呢?百度找了下相關資料,還真可以!而且有人寫出了山寨版的post傳值函數(shù),如下:

復制代碼 代碼如下:
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 , 上面函數(shù)完美了,既解決了超時控制又解決了Post傳值。

php技術PHP file_get_contents設置超時處理方法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 邓家佳电影| 大地资源高清播放在线观看| 肥猫正传| disturbia| 男人不可以穷演员表| 郭明翔| 一元二次不等式的例题100道| 校园风暴| 金针菇尽量少吃最好不吃什么| 血色樱花剧情介绍| 十万个冷笑话第二季| 诺亚方舟电影免费完整版在线观看 | tvb翡翠台直播| 五年级上册书法教案| 十八岁在线观看| 故宫博物院思维导图| 女人香韩国电影| 《沉默的证人》电影| 夜电影| 关于雨的成语| angela white在线播放| 《重紫》电视剧| 梁祝《引子》简谱| 情侣视频| 叶子楣作品| 凤凰卫视资讯台直播| pharrell| 男士专用山水画图片| 威虎山黑话大全口令| 高见立下| 纵横欲海| 沈敏| 高锰酸盐指数和cod的关系| 欧美日韩欧美| 电影不知不觉诱惑你| 冲出堕落城完整高清版| 林丹出轨视频| 能哥| 掐脖子的视频| 金秀贤real| 牛素云|