PHP - 从URL下载并通过FTP上传

时间:2011-06-16 08:43:53

标签: php ftp fopen ftps

这里有一点奇怪的概念......我们的客户希望通过FTP / S将数据推送给他们

我们的想法是,我们通过从URL(CSV文件)下载来下载我们的一个报告,然后通过FTP / S将其推送到客户端。我知道我可以在bash脚本中使用wget& ftp - 但需要通过Web界面添加到此,因此PHP是最好的前进方式。

由于这是后台任务,我可以延长超时等。

我也知道我可以使用fopen下载并保存文件,然后找到它并使用PHP FTP库上传它。只是想找一种使用fopen下载的方法,将数据保存在内存中直接上传。

提前获得任何帮助!

2 个答案:

答案 0 :(得分:4)

要从URL中检索数据,您有几个选项。您说您希望内存中的数据只能直接推送到FTP主机。

一种方法(我觉得最简单,但在可靠性和错误处理方面缺乏)是file_get_contents()

示例:

$url = 'http://www.domain.com/csvfile';
$data = file_get_contents($url);

现在您在$data中拥有了csv数据,以及如何将其推送到ftp服务器。

同样最简单的方法是使用上面的get示例中使用的内置流包装器。 (但请注意,这需要PHP 4.3.0)

只需像这样建立连接字符串。

$protocol = 'ftps';
$hostname = 'ftp.domain.com';
$username = 'user';
$password = 'password';
$directory = '/pub';
$filename = 'filename.csv';
$connectionString = sprintf("%s://%s:%s@%s%s/%s",
    $protocol,$username,$hostname,
    $password,$directory,
    $filename);


file_put_contents($connectionString,$data);

查看ftp wrappers manual

如果这不起作用,还有其他选择。

您可以使用curl获取数据,使用FTP Extension推送数据。

答案 1 :(得分:1)

为避免将文件保存到磁盘并“立即上传”,即在第一块数据下载后立即开始推送到FTP?

试试这个: http://www.php.net/manual/en/function.stream-copy-to-stream.php

您需要支持恢复上传的FTP服务器和客户端库