无需使用中间文件即可将内存数据传输到FTP服务器

时间:2014-11-24 11:18:00

标签: php ftp

我有一些JSON数据,我用PHP json_encode()对其进行编码,它看起来像这样:

{
    "site": "site1",
    "nbrSicEnt": 85,
}

我想要做的是将数据直接作为文件写入FTP服务器。

出于安全考虑,我不想在将文件发送到FTP服务器之前先在本地创建文件,我希望它能够即时创建。所以不使用tmpfile()例如。

当我阅读ftp_put的php文档时:

bool ftp_put ( resource $ftp_stream , string $remote_file , 
               string $local_file , int $mode [, int $startpos = 0 ] )

Ones需要先创建本地文件(string $local_file),然后再将其写入远程文件。

我正在寻找一种直接写入remote_file的方法。我怎么能用PHP做到这一点?

2 个答案:

答案 0 :(得分:2)

根据Can you append lines to a remote file using ftp_put() or something similar?Stream FTP Upload with PHP?,您应该可以使用file_put_contents()使用CURL或PHP的FTP包装器来执行某些操作。

$data = json_encode($object);
file_put_contents("ftp://user:pass@host/dir/file.ext", $data, FILE_APPEND);

答案 1 :(得分:2)

file_put_contents是最简单的解决方案:

file_put_contents('ftp://username:pa‌​ssword@hostname/path/to/file', $contents);

如果它不起作用,可能是因为你没有URL wrappers enabled in PHP

如果您需要更好地控制写入(传输模式,被动模式,偏移,读取限制等),请使用带ftp_fput句柄的php://temp (or the php://memory) stream

$conn_id = ftp_connect('hostname');

ftp_login($conn_id, 'username', 'password');
ftp_pasv($conn_id, true);

$h = fopen('php://temp', 'r+');
fwrite($h, $contents);
rewind($h);

ftp_fput($conn_id, '/path/to/file', $h, FTP_BINARY, 0);

fclose($h);
ftp_close($conn_id);

(添加错误处理)

或者您可以直接在FTP服务器上打开/创建文件。如果文件很大,这个特别有用,因为你不会将整个内容保存在内存中。

请参阅Generate CSV file on an external FTP server in PHP