一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP file_get_contents設置超時處理方法

PHP file_get_contents設置超時處理方法

2020-05-21 12:35PHP教程網 PHP教程

今天說的這篇是講超時的,確實在跨服務器提交的時候,不可避免的會遇到超時的情況,這個時候怎么辦?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($cnt<3 && ($bb=file_get_contents("//www.ythuaji.com.cn", false, stream_context_create($opts)))===FALSE) $cnt++;  
echo $cnt;  
echo $bb; 

 

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

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

 

復制代碼 代碼如下:

$cnt=0;  
 while($cnt<3 && ($bb=file_get_contents("//www.ythuaji.com.cn", false, stream_context_create($opts)))===FALSE) $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' => '[email protected]',  
    'submit' => 'submit',  
);  
echo Post ( '//www.ythuaji.com.cn', $data ); 

 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 999精品视频在线观看 | 非洲黑人女bbwxxxx | 国产成人在线小视频 | 精品牛牛影视久久精品 | 日本在线一区 | 亚洲男人天堂网站 | 18国产精品白浆在线观看免费 | 小苹果日本在线观看 | 亚洲黄色三级视频 | 成人在线免费观看 | 国产66 | 欧美作爱福利免费观看视频 | 亚洲成在人网站天堂一区二区 | 日本videossexx日本人 | 视频精品一区二区三区 | 国产精品久久久久毛片真精品 | 亚洲欧美日韩一区成人 | 久久丫线这里只精品 | 国产一区二区视频免费 | 亚洲国产成人久久综合一区77 | 国产自拍影院 | 99久久综合给久久精品 | 丝袜足控免费网站xx动漫漫画 | 亚洲男女天堂 | 四色6677最新永久网站 | 亚洲性久久久影院 | 色综合色狠狠天天综合色hd | 啊皇上你好大要知画 | 美女扒开屁股让我桶免费 | 日韩视频免费观看 | 亚洲国产综合久久久无码色伦 | 秋霞午夜伦午夜高清福利片 | 996热视频 | 久久热在线视频精品1 | 国产精品成人扳一级aa毛片 | 变态 另类 国产 亚洲 | 国产3344视频在线观看免费 | 国产成人精品曰本亚洲78 | 女人把扒开给男人爽的 | 亚洲国产美女精品久久 | 91制片厂制作果冻传媒八夷 |