这里有一点奇怪的概念......我们的客户希望通过FTP / S将数据推送给他们
我们的想法是,我们通过从URL(CSV文件)下载来下载我们的一个报告,然后通过FTP / S将其推送到客户端。我知道我可以在bash脚本中使用wget& ftp - 但需要通过Web界面添加到此,因此PHP是最好的前进方式。
由于这是后台任务,我可以延长超时等。
我也知道我可以使用fopen下载并保存文件,然后找到它并使用PHP FTP库上传它。只是想找一种使用fopen下载的方法,将数据保存在内存中直接上传。
提前获得任何帮助!
答案 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);
如果这不起作用,还有其他选择。
您可以使用curl获取数据,使用FTP Extension推送数据。
答案 1 :(得分:1)
为避免将文件保存到磁盘并“立即上传”,即在第一块数据下载后立即开始推送到FTP?
试试这个: http://www.php.net/manual/en/function.stream-copy-to-stream.php
您需要支持恢复上传的FTP服务器和客户端库