用PHP串流FTP上传?

时间:2012-06-28 16:11:52

标签: php upload ftp streaming

是否可以使用PHP流式传输FTP上传?我有需要上传到另一台服务器的文件,我只能通过FTP访问该服务器。不幸的是,我无法在此服务器上启动超时时间。是否可以这样做?

基本上,如果有办法写一个文件的一部分,然后附加下一部分(并重复)而不是一次上传整个东西,那就省了我。但是,我的谷歌搜索还没有给我答案。

这可以实现吗?

2 个答案:

答案 0 :(得分:1)

好的然后......这可能就是你要找的东西。你熟悉卷曲吗?

CURL可以支持附加FTP:

curl_setopt($ ch,CURLOPT_FTPAPPEND,TRUE); // APPEND FLAG

另一种选择是使用ftp:// / ftps://流,因为PHP 5允许附加。见ftp://; ftps://文档。可能更容易访问。

答案 1 :(得分:0)

将块添加到远程文件末尾的最简单方法是使用带有FILE_APPEND标记的file_put_contents

file_put_contents('ftp://username:pa‌​ssword@hostname/path/to/file', $chunk, FILE_APPEND);

如果它不起作用,可能是因为你没有URL wrappers enabled in PHP

如果您需要更好地控制书写(传输模式,被动模式等),或者您无法使用file_put_contents,请使用带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, $chunk);
rewind($h);

// prevent ftp_fput from seeking local "file" ($h)
ftp_set_option($conn_id, FTP_AUTOSEEK, false);

$remote_path = '/path/to/file';
$size = ftp_size($conn_id, $remote_path);
$r = ftp_fput($conn_id, $remote_path, $h, FTP_BINARY, $size);

fclose($h);
ftp_close($conn_id);

(添加错误处理)