溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php如何設(shè)置下載文件超時時間

發(fā)布時間:2021-08-31 14:30:02 來源:億速云 閱讀:194 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“php如何設(shè)置下載文件超時時間”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“php如何設(shè)置下載文件超時時間”這篇文章吧。

使用curl

可以使用curl自己實現(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è)置,腳本返回一個致命的錯誤。默認值為30秒,或者是在php.ini的max_execution_time被定義的值,如果此值存在。如果設(shè)置為0(零),沒有時間方面的限制。
當此函數(shù)被調(diào)用時,set_time_limit()會從零開始重新啟動超時計數(shù)器。換句話說,如果超時默認是30秒,在腳本運行了了25秒時調(diào)用 set_time_limit(20),那么,腳本在超時之前可運行總時間為45秒
Warning
當php運行于安全模式時,此功能不能生效。除了關(guān)閉安全模式或改變php.ini中的時間限制,沒有別的辦法。
Note:
set_time_limit()函數(shù)和配置指令max_execution_time只影響腳本本身執(zhí)行的時間。任何發(fā)生在諸如使用system()的系統(tǒng)調(diào)用,流操作,數(shù)據(jù)庫操作等的腳本執(zhí)行的最大時間不包括其中,當該腳本已運行。在測量時間是實值的Windows中,情況就不是這樣。

因為file_get_contents是一個流操作,所以這個不能限制。

default_socket_timeout (無效)

PHP 中file_get_contents 超時時間

max_execution_time = 30
default_socket_timeout = 60
假設(shè)你使用file_get_contents花費45,而max_execution_time是30,它將超時嗎?
答案是NO,因為max_execution_time不影響操作系統(tǒng)調(diào)用或stream操作
default_socket_timeout是在socket響應(yīng)之前計算的,只要得到響應(yīng),將會一直執(zhí)行下去

使用HTTP context選項(無效)

HTTP context選項
估計是這里的超時時間不是指的表面上的整個函數(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);

以上是“php如何設(shè)置下載文件超時時間”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI