《PHP實(shí)例:php下載文件超時(shí)時(shí)間的設(shè)置方法》要點(diǎn):
本文介紹了PHP實(shí)例:php下載文件超時(shí)時(shí)間的設(shè)置方法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP實(shí)戰(zhàn)使用curl
PHP實(shí)戰(zhàn)可以使用curl自己實(shí)現(xiàn)一個(gè)curl_file_get_contents函數(shù)
PHP實(shí)戰(zhàn)
//CURLOPT_FOLLOWLOCATION TRUE 時(shí)將會(huì)根據(jù)服務(wù)器返回 HTTP 頭中的 "Location: " 重定向.(注意:這是遞歸的,"Location: " 發(fā)送幾次就重定向幾次,除非設(shè)置了 CURLOPT_MAXREDIRS,限制最大重定向次數(shù)
function curl_file_get_contents($durl){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //將獲取的信息以字符串形式返回
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); //指定最多的 HTTP 重定向次數(shù)
curl_setopt($ch,CURLOPT_TIMEOUT,2); //允許 cURL 函數(shù)執(zhí)行的最長(zhǎng)秒數(shù)
$r = curl_exec($ch);
if(curl_errno($ch)){ //如果存在錯(cuò)誤,輸出錯(cuò)誤(超時(shí)是不會(huì)拋出異常的,需要用這個(gè)函數(shù)設(shè)置自己的處理方式)
echo 'Curl error: ' . curl_error($ch);
}
return $r;
}
PHP實(shí)戰(zhàn)超時(shí)的錯(cuò)誤輸出類(lèi)似下邊這樣
PHP實(shí)戰(zhàn)Curl error: Operation timed out after 991 milliseconds with 3706978 out of 155372766 bytes receiveddone
PHP實(shí)戰(zhàn)其他可能方式
PHP實(shí)戰(zhàn)設(shè)置腳本的最大執(zhí)行時(shí)間(無(wú)效)
PHP實(shí)戰(zhàn)void set_time_limit ( int $seconds )
PHP實(shí)戰(zhàn)如果超過(guò)了此設(shè)置,腳本返回一個(gè)致命的錯(cuò)誤.默認(rèn)值為30秒,或者是在php.ini的max_execution_time被定義的值,如果此值存在.如果設(shè)置為0(零),沒(méi)有時(shí)間方面的限制.
當(dāng)此函數(shù)被調(diào)用時(shí),set_time_limit()會(huì)從零開(kāi)始重新啟動(dòng)超時(shí)計(jì)數(shù)器.換句話(huà)說(shuō),如果超時(shí)默認(rèn)是30秒,在腳本運(yùn)行了了25秒時(shí)調(diào)用 set_time_limit(20),那么,腳本在超時(shí)之前可運(yùn)行總時(shí)間為45秒
Warning
當(dāng)php運(yùn)行于安全模式時(shí),此功能不能生效.除了關(guān)閉安全模式或改變php.ini中的時(shí)間限制,沒(méi)有別的辦法.
Note:
set_time_limit()函數(shù)和配置指令max_execution_time只影響腳本本身執(zhí)行的時(shí)間.任何發(fā)生在諸如使用system()的系統(tǒng)調(diào)用,流操作,數(shù)據(jù)庫(kù)操作等的腳本執(zhí)行的最大時(shí)間不包括其中,當(dāng)該腳本已運(yùn)行.在測(cè)量時(shí)間是實(shí)值的Windows中,情況就不是這樣.
PHP實(shí)戰(zhàn)因?yàn)閒ile_get_contents是一個(gè)流操作,所以這個(gè)不能限制.
PHP實(shí)戰(zhàn)default_socket_timeout (無(wú)效)
PHP實(shí)戰(zhàn)PHP 中file_get_contents 超時(shí)時(shí)間
PHP實(shí)戰(zhàn)max_execution_time = 30
default_socket_timeout = 60
假設(shè)你使用file_get_contents花費(fèi)45,而max_execution_time是30,它將超時(shí)嗎?
答案是NO,因?yàn)閙ax_execution_time不影響操作系統(tǒng)調(diào)用或stream操作
default_socket_timeout是在socket響應(yīng)之前計(jì)算的,只要得到響應(yīng),將會(huì)一直執(zhí)行下去
PHP實(shí)戰(zhàn)使用HTTP context選項(xiàng)(無(wú)效)
PHP實(shí)戰(zhàn)HTTP context選項(xiàng)
估計(jì)是這里的超時(shí)時(shí)間不是指的表面上的整個(gè)函數(shù)的執(zhí)行時(shí)間,還是無(wú)效
PHP實(shí)戰(zhàn)
$opts = array(
'http'=>array(
'method'=>"GET",
'timeout'=>60,
)
);
$context = stream_context_create($opts);
$html =file_get_contents('http://www.example.com', false, $context);
PHP實(shí)戰(zhàn)以上就是本文的全部?jī)?nèi)容,希望對(duì)大家有所幫助,希望大家繼續(xù)關(guān)注維易PHP的最新內(nèi)容.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/3138.html