2011-11-05 55 views
0

基本上,我有一個簡單的cURL提取網頁功能,其中包括以下內容;PHP cURL - 隨機 - 不工作,錯誤調試沒有提供任何信息

function FETCH_WEBPAGE($url) { 

    $curl_handle = curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL, $url); 
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
    curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30'); 
    $file = curl_exec($curl_handle); 

    if($file===false) { 
     DEBUG_TXT('Error reading '.$url.chr(10).curl_error($curl_handle)); 
    } else { 
     DEBUG_TXT('Fetching: '.$url.' - Got: '.$response['url'].chr(10).$file); 
    } 

    $response = curl_getinfo($curl_handle); 
    curl_close($curl_handle); 

    if(trim($response['url'])=='') { 
     $response['url'] = $url; 
    } 

    return array('file'=>$file,'url'=>$response['url']); 

} 

現在,我運行了我自己的Apache服務器,並且還有一臺運行Apache的專用服務器。當我從我自己的機器上運行這些代碼時,一切都很順利。只要我請求的服務器可用,我的DEBUG_TXT就會返回「獲取/獲得」(帶有內容)響應。 (它創建一個調試文本文件。)

但是,當我從我的專用服務器運行此我無法得到它的工作。我總是收到錯誤「無法找到主機」或「名稱查找超時」作爲我的cURL錯誤。

STRANGEST THING對於網站的其他用戶來說,該功能的工作原理是PERFECTLY FINE,即使試圖訪問相同的URL也不會給出錯誤。爲了我的生活,我無法理解爲什麼這種選擇性不適合我和我單獨工作。

編輯:

我應該指出,curl_getinfo()似乎爲我工作,即使curl_exec()不會。例如,我可以獲取標題信息,但是curl_exec()仍然會失敗。這很困擾我,因爲這似乎與我網站上的用戶帳戶直接相關 - 可能我爲自己獲取Cookie信息的方式與此錯誤有關?我無法想象它會是怎樣的,但它實際上是唯一的區別(就PHP解釋器而言),我如何處理我個人使用該功能的方式與網站上的其他用戶之間的差異。

此外,通過SSH連接時,我可以成功地ping通我嘗試從我的專用計算機訪問的網站。

+0

您能否澄清您對「網站的其他用戶」的含義?你的意思是,當其他人訪問你的專用服務器上的PHP腳本,它的作品? –

+0

您是否嘗試通過SSH在命令行上運行nslookup?錯誤消息似乎表明名稱解析存在問題。 –

+0

@JakobEgger - 這個函數只是解析/解釋用戶輸入的一個更大的腳本的一部分。當其他人向腳本提交信息時,FETCH_WEBPAGE()函數按其應有的方式工作。當我個人使用它時,它不會。我把它縮小到curl_exec上,因爲$ url被傳遞給函數。 此外,剛剛嘗試過nslookup現在通過SSH,並解決罰款。 – kwh

回答

1

我解決了我的問題 - 儘管我仍然不知道原始問題是什麼。我轉而使用get_headers()和stream_context_set_default(),使用fopen()和stream_context_create()。

不幸的是(對我來說),fopen()尊重HTTP響應代碼,所以它不會像自定義404錯誤頁面或503頁面那樣獲取頁面數據。我的解決方法是在我嘗試fopen之前檢查標題,並只輸出文件內容爲「404 - 頁面未找到」等。

這實際上並不是解決我原來的問題,但它修復了問題。對於爲什麼cURL停止工作,我仍然感到困惑。雖然我以前遇到過問題,即使在我自己的機器上,cURL也有選擇地決定「不工作」。我的網站的用戶已經報告(儘管很少)相同類型的錯誤。

儘管現在一切都很順利,但看起來問題已經解決了。

+0

我發現有必要使用包括http://前綴在內的絕對完整網址 – jobeard

相關問題