2

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

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

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

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

提前感谢任何帮助!

4

2 回答 2

4

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

一种方法(我发现使用最简单,但缺乏可靠性和错误处理)是file_get_contents()

例子:

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

现在你有你的 csv 数据$data,关于如何将它推送到 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 包装器手册

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

您可以使用curl获取数据并使用FTP 扩展来推送它。

于 2011-06-16T09:01:07.593 回答
1

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

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

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

于 2011-06-16T09:13:57.597 回答