我有一些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做到这一点?
根据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);
file_put_contents
是最简单的解决方案:
file_put_contents('ftp://username:password@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服务器上打开/创建文件。如果文件很大,这个特别有用,因为你不会将整个内容保存在内存中。