2014-11-24 196 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); 

(添加錯誤處理)

相關問題