cURL FTP连接

时间:2012-02-07 09:25:09

标签: php curl ftp

我们的服务器上运行了一个cron-job,它从MeteoConsult下载数据,MeteoConsult是一个荷兰天气报告公司......事情......

无论如何,基本上脚本通过cURL使用FTP下载XML文件,然后使用SimpleXML进行解析。一两个星期前,它决定随意死亡,杀死我们观看天气的乐趣。我很无能为力。 FTP数据正确且已经过验证。 Meteo服务器不会阻止正在运行cron-job的服务器的IP地址。

为什么开发人员使用cURL通过FTP下载文件对我来说真的很神秘。当我在不同的服务器上运行脚本时,它似乎可以工作。

有了这些信息,我假设我们要么采用“老式”方式而且不能使用新的cURL / PHP版本,尽管我找不到任何相关信息,或者我们服务器的防火墙阻止了连接。

这是(部分)剧本:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,"ftp://username:password@ftp.meteocon.nl/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

非常感谢提前。

3 个答案:

答案 0 :(得分: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);

我没有测试过这个,但我希望它有所帮助。

答案 1 :(得分:0)

似乎问题是IPv6 FTP PASV相关。尝试打开/关闭(或测试完全删除)CURLOPT_FTP_USE_EPSV选项。 您可以查看此信息以获取更多信息:IPv6 FTP PASV problems

答案 2 :(得分:0)

主机最近加强了服务器的安全性。他们必须在白名单中添加URL。

感谢所有答案。