2014-11-24 32 views
1

我有,我用PHP的json_encode()编码它的一些JSON数据,它看起来像这样:传输内存数据到FTP服务器,而无需使用中间文件

{ 
    "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?

+0

这不是ftp proto的工作原理。 – mudasobwa 2014-11-24 11:21:57

+0

@mudasobwa FTP协议并不要求发送的数据是一个实际的文件,它只是PHP的实现。 – CodeCaster 2014-11-24 11:24:01

+0

@CodeCaster这是一个我们称之为“实际文件”的问题。这个协议的名称意味着...... – mudasobwa 2014-11-24 11:28:44

回答

2

file_put_contents是最简单的解决方案:

file_put_contents('ftp://username:pa‌​[email protected]/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'); 

$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); 

(添加错误处理)

相关问题