流FTP上传与PHP块?(Stream FTP upload in chunks with PHP?

2019-07-30 04:01发布

是否有可能流的FTP上传用PHP? 我有我需要上传到另一台服务器上的文件,而我只能通过FTP访问该服务器。 不幸的是,我不能起来的超时时间在此服务器上。 它是在所有可能做到这一点?

基本上,如果是写一个文件的一部分,然后追加下一部分(重复),而不是一次上传整个事情的方式,这会来救我的。 然而,我的谷歌搜索还没有一个答案给我提供。

这是可以实现的?

Answer 1:

那好吧......这可能是你在找什么。 你熟悉卷曲?

卷曲可以支持附加的FTP:

curl_setopt($ CH,CURLOPT_FTPAPPEND,TRUE); //追加FLAG

另一种选择是使用ftp:// / FTPS://流,因为PHP 5它们允许追加。 请参阅ftp://; FTPS://文档。 可能会更容易访问。



Answer 2:

到块追加到远程文件的末尾,最简单的方法是使用file_put_contentsFILE_APPEND标志:

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

如果它不工作,可能是因为你没有在支持PHP的URL封装 。


如果你需要写一个更大的控制(传输模式,被动模式等),或者你不能使用file_put_contents ,使用ftp_fput带有把手的php://temp (或php://memory )流 :

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

(添加错误处理)



文章来源: Stream FTP upload in chunks with PHP?