我們的網站上有一個使用cURL從遠程域獲取XML數據的頁面。幾天前它隨機開始失敗(可能有1/3的請求失敗)。在使用我們的主機和遠程站點的操作員進行調試後,我們發現curl錯誤是「名稱查找超時」,表示DNS問題。我們的CURLOPT_CONNECTTIMEOUT
設置爲5.當我將其更改爲30時,它每次都有效。PHP的cURL突然無法獲得IP地址,是file_get_contents一個很好的替代品嗎?
但是這是一個實時頁面,我不能讓遊客在等待響應時懸掛30秒。另外,增加的超時並不能回答爲什麼這首先失敗的問題。這個系統已經存在多年,5秒的超時時間一直很好。
此外,我發現如果我做dns_get_record()
,它每次都有效,我很快就會得到一個有效的IP地址。所以我修改了腳本,首先執行dns_get_record()
,然後我將cURL複製到它返回的IP地址,從而繞過cURL結尾處的名稱查找。它工作正常,但它很愚蠢。
所以,第一個問題,沒有人有任何建議,如何或爲什麼cURL可能會失敗。我們的主機和遠程站點的主機都同意它是某個DNS服務器,但都不同意誰的DNS服務器負責,因爲他們都表示他們自己的服務器是好的,而且我們的主機說他們可以ping通遠程域而沒有問題。
第二個問題,是file_get_contents()
足夠替換dns_get_record()
+ cURL?或者我應該堅持使用dns_get_record()
+ cURL?
如果是故意設置的遠程服務器那麼即使將其切換到file_get_contents,您也無法控制失敗。你是否比遠程服務器調用速度快得多? – mauris
@mauris不,每次這個頁面被擊中時,這只是一個請求。這是一個受歡迎的頁面,所以它可能會經常訪問,但每個訪問都是分開的。另外請注意,dns_get_record()總是成功,所以它可能不同於cURL來獲得IP地址?如果是這樣,也許file_get_contents()的作品類似? –
如果服務器需要更多時間,請升級遠程服務器以提高速度,或者使用AJAX – mauris