【HTTP存取】
一般我們造訪HTTP方式很多,主要是:curl, socket, file_get_contents() 等方法。
如果碰到對方伺服器一直沒有回應的時候,我們就悲劇了,很容易把整個伺服器搞死,所以在訪問http的時候也需要考慮逾時的問題。
[ CURL 存取HTTP]
CURL 是我們常用的一種比較可靠的存取HTTP協定介面的lib庫,效能高,還有一些同時支援的功能等。
CURL:
curl_setopt($ch, opt) 可以設定一些逾時的設置,主要包括:
#CURLOPT_TIMEOUT設定cURL允許執行的最長秒數。
CURLOPT_TIMEOUT_MS 設定cURL允許執行的最長毫秒數。 ( 在cURL 7.16.2中被加入。從PHP 5.2.3起可使用。)
CURLOPT_CONNECTTIMEOUT 在發起連接前等待的時間,如果設定為0,則無限等待。
CURLOPT_CONNECTTIMEOUT_MS 嘗試連線等待的時間,以毫秒為單位。如果設定為0,則無限等待。 在cURL 7.16.2中被加入。從PHP 5.2.3開始可用。
CURLOPT_DNS_CACHE_TIMEOUT 設定在記憶體中保存DNS資訊的時間,預設為120秒。
curl普通秒級超時:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60); //只需要設定一個秒的數量就可以
curl_setopt($ ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
curl級逾時使用:
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl如果需要毫秒超時,需要增加:
curl_easy_setopt(curl, CURLOPT_NOSAL,
##curl_easy_setopt(curl, CURLOPT_NOSAL, 1L );或是:
curl_setopt ( $ch, CURLOPT_NOSIGNAL, true); 是可以支援毫秒等級逾時設定的# curl一個毫秒超時的範例:
<?php if (!isset($_GET['foo'])) { // Client $ch = curl_init('http://example.com/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个 curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用 $data = curl_exec($ch); $curl_errno = curl_errno($ch); $curl_error = curl_error($ch); curl_close($ch); if ($curl_errno > 0) { echo "cURL Error ($curl_errno): $curl_error\n"; } else { echo "Data received: $data\n"; } } else { // Server sleep(10); echo "Done."; } ?>
[流處理方式存取HTTP]
除了curl,我們還經常自己使用fsockopen、或是file操作函數來進行HTTP協定的處理,所以,我們對這塊的逾時處理也是必須的。推薦教學:PHP影片教學
####以上是php請求介面逾時如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!