2017-03-11 42 views
1

我有一個cronjob從不同的URL下載不同的文件並修改數據。古怪的事情是,一切運作良好,現在我想添加兩個網址,但與這些網址我有一些問題...無法打開流 - DOM和File_Put_Contents

但我只是沒有爲什麼...所有網址(8)使用相同的功能。但只有2個新的URL會引發這個錯誤。我不允許在此處提供網址,但我可以說,我可以在Chrome瀏覽器中下載這兩個網址。

我打開一個URL與DOM:

function fetchXmlDocument($url, $output, $dom = null){ 
    if (!$dom instanceof DOMDocument) { 
     $dom = new DOMDocument('1.0', 'utf-8'); 
     $dom->preserveWhiteSpace = false; 
     $dom->formatOutput = true; 
    } 

    $dom->load($url); 
    $dom->save($output); 
    return $dom; 
} 

在這裏,我得到這個錯誤:

DOMDocument::load(http://myurl.de): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

DOMDocument::load(): I/O warning : failed to load external entity ...

另一個URL加載的fopen:

function fetchCsvDocument($url, $output){ 
    return file_put_contents($output, fopen($url, 'r')); 
} 

在這裏,我得到此錯誤:

fopen(http://myurl.de): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable

有人知道我該如何解決這個錯誤? 我只是不明白爲什麼我可以用我的瀏覽器下載URL,但PHP告訴我403甚至503.

我用這些函數下載的其他文件和修改不會引發這個錯誤...?

問候和謝謝你!

+0

我建議使用['libxml_set_streams_context'](http://php.net/manual/ en/function.libxml-set-streams-context.php)來設置用戶代理。如果不起作用,請嘗試使用提供更多選項並返回更多信息的'cURL'加載文件。有關[http狀態代碼]的更多信息(https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) –

回答

0

403禁止:

服務器最有可能檢測到的請求不是來自瀏覽器(也許不喜歡),和/或服務器需要一些會話狀態(該瀏覽器發送的,但你的代碼可能不會)。

要查看瀏覽器和服務器之間發送的內容,請在Chrome中按F12並選擇網絡,然後單擊鏈接以查看HTTP標頭。

503服務暫時不可用可能是相同的原因(如果該網址也適用於瀏覽器)。

還檢查http與https。

另一個原因可能是該URL不能正常encoded(即替換%20空間)的瀏覽器自動完成

相關問題