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

问题描述 投票:2回答:2

我有一些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 ] )

在将其写入远程文件之前,需要创建本地文件(string $local_file)。

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

php ftp
2个回答
2
投票

根据Can you append lines to a remote file using ftp_put() or something similar?Stream FTP Upload with PHP?,你应该可以使用curz或PHP的FTP包装器使用file_put_contents()做一些事情。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.