国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

PHP file_get_contents設(shè)置超時(shí)處理方法

2020-03-22 20:19:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
file_get_contents的超時(shí)處理話(huà)說(shuō),從PHP5開(kāi)始,file_get_content已經(jīng)支持context了(手冊(cè)上寫(xiě)著:5.0.0 Added the context support. ),也就是說(shuō),從5.0開(kāi)始,file_get_contents其實(shí)也可以POST數(shù)據(jù)。今天說(shuō)的這篇是講超時(shí)的,確實(shí)在跨服務(wù)器提交的時(shí)候,不可避免的會(huì)遇到超時(shí)的情況,這個(gè)時(shí)候怎么辦?set_time_limit是沒(méi)有用的,只有用context中的timeout時(shí)間來(lái)控制。相反,我們不是要抑止,而是要管理。比如在超時(shí)返回錯(cuò)誤后,進(jìn)行一次嘗試,就象js中的 settimeout那樣,對(duì)函數(shù)重新處理。錯(cuò)誤超過(guò)3次或者5次后,我們就確實(shí)的認(rèn)為無(wú)法連接服務(wù)器而徹底放棄。這,是一個(gè)好辦法,應(yīng)該值得推薦使用。其實(shí)。不全是file_get_contents,只要支持context的都應(yīng)該加上,避免超時(shí)浪費(fèi)時(shí)間。這樣可以被支持的函數(shù)大致有:fsocketopen(該函數(shù)的最后一個(gè)參數(shù)。好象比較推薦在讀stream的時(shí)候,使用stream_time_out函數(shù)進(jìn)行控制),fopen(也是從PHP5開(kāi)始加入context支持),file(PHP5加入支持),curl(curl有自已的變量 CURLOPT_TIMEOUT)等 。在使用file_get_contents函數(shù)的時(shí)候,經(jīng)常會(huì)出現(xiàn)超時(shí)的情況,在這里要通過(guò)查看一下html' target='_blank'>錯(cuò)誤提示,看看是哪種錯(cuò)誤,比較常見(jiàn)的是讀取超 時(shí),這種情況大家可以通過(guò)一些方法來(lái)盡量的避免或者解決。這里就簡(jiǎn)單介紹兩種:一、增加超時(shí)的時(shí)間限制這里需要注意:set_time_limit只是設(shè)置你的PHP程序的超時(shí)時(shí)間,而不是file_get_contents函數(shù)讀取URL的超時(shí)時(shí) 間。我一開(kāi)始以為set_time_limit也能影響到file_get_contents,后來(lái)經(jīng)測(cè)試,是無(wú)效的。真正的修改 file_get_contents延時(shí)可以用resource $context的timeout參數(shù):復(fù)制代碼 代碼如下:
$opts = array(
'http'= array(
'method'= "GET",
'timeout'= 1,//單位秒
)
);

$cnt=0;
while($cnt 3 && ($bb=file_get_contents("http://www.phpstudy.net", false, stream_context_create($opts)))===FALSE) $cnt++;
echo $cnt;
echo $bb;
二、一次有延時(shí)的話(huà)那就多試幾次有時(shí)候失敗是因?yàn)?a href='http://www.survivalescaperooms.com/wl/' target='_blank'>網(wǎng)絡(luò)等因素造成,沒(méi)有解決辦法,但是可以修改程序,失敗時(shí)重試幾次,仍然失敗就放棄,因?yàn)閒ile_get_contents()如果失 敗將返回 FALSE,所以可以下面這樣編寫(xiě)代碼:復(fù)制代碼 代碼如下:
$cnt=0;
while($cnt 3 && ($bb=file_get_contents("http://www.phpstudy.net", false, stream_context_create($opts)))===FALSE) $cnt++;
以上方法對(duì)付超時(shí)已經(jīng)OK了。那么Post呢?細(xì)心點(diǎn)有人發(fā)現(xiàn)了'method'= ”GET”, 對(duì)!是不是能設(shè)置成post呢?百度找了下相關(guān)資料,還真可以!而且有人寫(xiě)出了山寨版的post傳值函數(shù),如下:復(fù)制代碼 代碼如下:
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.phpstudy.net', $data );
OK , 上面函數(shù)完美了,既解決了超時(shí)控制又解決了Post傳值。PHP教程

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵丘县| 休宁县| 巩义市| 甘德县| 灌南县| 南宫市| 遂宁市| 江北区| 平原县| 玉环县| 太仆寺旗| 罗定市| 道真| 伊通| 贵港市| 平山县| 阆中市| 宿迁市| 赤壁市| 依兰县| 鲁山县| 乐平市| 丹寨县| 灵武市| 库尔勒市| 永昌县| 白沙| 马公市| 西昌市| 鹿泉市| 静安区| 辛集市| 蒙城县| 辽中县| 离岛区| 贡觉县| 陵水| 台北县| 新邵县| 吐鲁番市| 响水县|