2012-02-07 122 views
2

我們有一個cron作業我們的服務器上運行,從MeteoConsult,這是一些荷蘭天氣報告公司......事情下載數據...捲曲FTP連接

無論如何,基本上腳本下載一個XML文件使用FTP通過cURL,然後使用SimpleXML進行分析。一兩個星期前,它決定隨機死亡,殺死我們觀看天氣的喜悅。我無能爲力。 FTP數據是正確的並且已被驗證。 Meteo服務器不會阻止正在運行cron-job的服務器的IP地址。

爲什麼開發者使用cURL通過FTP下載文件對我來說確實是個謎。當我在另一臺服務器上運行腳本時,它似乎可以工作。

有了這些信息,我認爲或者我們使用的是「老式」方式,並且不能使用新的cURL/PHP版本,儘管我找不到任何有關這方面的信息,或者我們的服務器的防火牆正在阻止連接。

這裏(的一部分)的腳本:

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL,"ftp://username:[email protected]/file.xml"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_TIMEOUT, 300); 
curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0); 

$xml = curl_exec($curl); 
$status = curl_getinfo($curl); 
curl_close($curl); 

// At this point, $xml is NULL 

有什麼不對的腳本?如果沒有,你們有什麼想法可以解決嗎?

PHP version: 5.2.12 
libcurl version: 7.20.0 

非常感謝提前。

+0

您是否嘗試過檢查錯誤? http://php.net/manual/en/function.curl-error.php – Znarkus 2012-02-07 09:28:06

+0

@Znarkus好點! '字符串(24)「無法連接到主機」'。儘管如此,仍然不完全解釋。 – 2012-02-07 09:51:22

+0

你可以通過命令行'curl'或'ftp'從服務器連接到FTP嗎? – Znarkus 2012-02-07 12:18:18

回答

0

主機最近加強了服務器的安全性。他們必須在白名單中添加URL。

感謝您的所有答案。

0

看看在download a file from ftp using curl and php

提供基本上你需要分離出URI和身份驗證設置像這樣的答案:

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "ftp.meteocon.nl/file.xml"); #input 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FILE, $file); #output 
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]"); 
curl_exec($curl); 

我沒有測試過這一點,但我希望它能幫助。

+0

沒有幫助,無論如何。 – 2012-02-07 09:52:48

0

看來問題是IPv6 FTP PASV相關的問題。嘗試打開/關閉(或測試完全刪除)CURLOPT_FTP_USE_EPSV選項。 您可以點擊此處查看更多信息:IPv6 FTP PASV problems

+0

沒有工作..無論如何。 – 2012-02-07 09:59:24