PHP file_get_contents設定逾時處理方法_PHP教學課程

WBOY
發布: 2016-07-21 16:13:20
原創
760 人瀏覽過

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' 'method'=>"GET",  
    'timeout'=>1,//單位秒 
   )  
);   
echo $cnt;  
echo $ bb; 



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

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

複製程式碼

程式碼如下:$cnt=0;    while($cnt


以上方法對付超時已經OK了。那麼Post呢?細心有人發現了'method'=>”GET”, 對!是不是能設定成post呢?百度找了下相關資料,還真可以!而且有人寫出了山寨版的post傳值函數,如下:

複製程式碼

程式碼如下:function Post($url, $post = null){  function Post($url, $post = null){ 
 array ();  
    if (is_array ( $post )) {  
        ksort ( $post );           'timeout' => 60,   
            'method' => 'POST',   
            'content' => http_build_query( $post, '', '   'content' => http_build_query( $post, '', '    

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

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


OK , 上面函數完美了,既解決了超時控制又解決了Post傳值。

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/313508.htmlTechArticlefile_get_contents的超時處理話說,從PHP5開始,file_get_content已經支援context了(手冊上寫著Added the context support. ),也就是說,從5.0開始...
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板