我有一些用PHP的json_encode()
编码的JSON数据,它看起来像这样:
{
"site": "site1",
"nbrSicEnt": 85,
}
我想做的是将数据作为文件直接写入FTP服务器。
出于安全原因,我不希望在将文件发送到FTP服务器之前先在本地创建文件,我希望动态创建它。因此,例如不使用tmpfile()
。
当我阅读 php 文档时 ftp_put
:
bool ftp_put ( resource $ftp_stream , string $remote_file ,
string $local_file , int $mode [, int $startpos = 0 ] )
在将本地文件写入远程文件之前,需要创建一个本地文件(string $local_file
)。
我正在寻找一种直接写入remote_file的方法。如何使用 PHP 来做到这一点?
file_put_contents
是最简单的解决方案:
file_put_contents('ftp://username:password@hostname/path/to/file', $contents);
如果它不起作用,可能是因为您没有在 PHP 中启用 URL 包装器。
如果需要更好地控制写入(传输模式、被动模式、偏移、读取限制等),请使用带有php://temp
(或php://memory
)流句柄的ftp_fput
:
$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服务器上打开/创建文件。如果文件很大,这特别有用,因为您不会将整个内容保留在内存中。
请参阅在 PHP 中的外部 FTP 服务器上生成 CSV 文件。
根据您可以使用 ftp_put() 或类似的东西将行附加到远程文件吗? 和 使用 PHP 流式传输 FTP 上传? 您应该能够使用 CURL 或 PHP 的 FTP 包装器做一些事情 file_put_contents()
.
$data = json_encode($object);
file_put_contents("ftp://user:pass@host/dir/file.ext", $data, FILE_APPEND);