php下載文件超時時間的設(shè)置方法
使用curl
可以使用curl自己實(shí)現(xiàn)一個curl_file_get_contents函數(shù)
//CURLOPT_FOLLOWLOCATION TRUE 時將會根據(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í)行的最長秒數(shù)
$r = curl_exec($ch);
if(curl_errno($ch)){ //如果存在錯誤,輸出錯誤(超時是不會拋出異常的,需要用這個函數(shù)設(shè)置自己的處理方式)
echo 'Curl error: ' . curl_error($ch);
}
return $r;
}
超時的錯誤輸出類似下邊這樣
Curl error: Operation timed out after 991 milliseconds with 3706978 out of 155372766 bytes receiveddone
其他可能方式
設(shè)置腳本的最大執(zhí)行時間(無效)
void set_time_limit ( int $seconds )
如果超過了此設(shè)置,腳本返回一個致命的錯誤。默認(rèn)值為30秒,或者是在php.ini的max_execution_time被定義的值,如果此值存在。如果設(shè)置為0(零),沒有時間方面的限制。
當(dāng)此函數(shù)被調(diào)用時,set_time_limit()會從零開始重新啟動超時計(jì)數(shù)器。換句話說,如果超時默認(rèn)是30秒,在腳本運(yùn)行了了25秒時調(diào)用 set_time_limit(20),那么,腳本在超時之前可運(yùn)行總時間為45秒
Warning
當(dāng)php運(yùn)行于安全模式時,此功能不能生效。除了關(guān)閉安全模式或改變php.ini中的時間限制,沒有別的辦法。
Note:
set_time_limit()函數(shù)和配置指令max_execution_time只影響腳本本身執(zhí)行的時間。任何發(fā)生在諸如使用system()的系統(tǒng)調(diào)用,流操作,數(shù)據(jù)庫操作等的腳本執(zhí)行的最大時間不包括其中,當(dāng)該腳本已運(yùn)行。在測量時間是實(shí)值的Windows中,情況就不是這樣。
因?yàn)閒ile_get_contents是一個流操作,所以這個不能限制。
default_socket_timeout (無效)
PHP 中file_get_contents 超時時間
max_execution_time = 30
default_socket_timeout = 60
假設(shè)你使用file_get_contents花費(fèi)45,而max_execution_time是30,它將超時嗎?
答案是NO,因?yàn)閙ax_execution_time不影響操作系統(tǒng)調(diào)用或stream操作
default_socket_timeout是在socket響應(yīng)之前計(jì)算的,只要得到響應(yīng),將會一直執(zhí)行下去
使用HTTP context選項(xiàng)(無效)
HTTP context選項(xiàng)
估計(jì)是這里的超時時間不是指的表面上的整個函數(shù)的執(zhí)行時間,還是無效
$opts = array(
'http'=>array(
'method'=>"GET",
'timeout'=>60,
)
);
$context = stream_context_create($opts);
$html =file_get_contents('http://www.example.com', false, $context);
以上就是本文的全部內(nèi)容,希望對大家有所幫助,希望大家繼續(xù)關(guān)注腳本之家的最新內(nèi)容。
相關(guān)文章
PHP類的聲明與實(shí)例化及構(gòu)造方法與析構(gòu)方法詳解
這篇文章主要介紹了PHP類的聲明與實(shí)例化及構(gòu)造方法與析構(gòu)方法,結(jié)合實(shí)例形式分析了PHP面向?qū)ο箢惖穆暶髋c使用相關(guān)技巧,需要的朋友可以參考下2016-01-01
PHP代碼加密和擴(kuò)展解密實(shí)戰(zhàn)
這篇文章主要介紹了PHP代碼加密和擴(kuò)展解密實(shí)戰(zhàn),對加密解密感興趣的同學(xué),可以參考下2021-04-04
PHP偽造來源HTTP_REFERER的方法實(shí)例詳解
這篇文章主要介紹了PHP偽造來源HTTP_REFERER的方法,以實(shí)例形式較為詳細(xì)的分析了php偽造來源HTTP_REFERER的技巧與相關(guān)注意事項(xiàng),非常具有實(shí)用價值,需要的朋友可以參考下2015-07-07
php實(shí)現(xiàn)動態(tài)口令認(rèn)證的示例代碼
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)動態(tài)口令認(rèn)證的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
php清空(刪除)指定目錄下的文件,不刪除目錄文件夾的實(shí)現(xiàn)代碼
這篇文章主要介紹了php清空(刪除)指定目錄下的文件,不刪除目錄文件夾的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09

