我正在创建一个备份系统,其中将自动生成备份,所以我会将备份存储在不同的服务器上,但是当我想下载它们时,我希望链接是一次性链接,这并不难为了使这个安全,我正在考虑存储文件,以便它们不能通过其他服务器上的 http 访问。
所以我要做的是通过 ftp 连接,将文件下载到主服务器,然后将其提交下载并删除它,但是如果备份很大,这将需要很长时间,有没有办法从 FTP 流式传输而不显示下载实际位置而不将其存储在服务器上的人?
这是一个使用cURL的非常基本的示例。它指定了一个读取回调,当可以从 FTP 读取数据时将调用该回调,并将数据输出到浏览器,以便在与备份服务器进行 FTP 事务时同时下载到客户端。
这是一个非常基本的示例,您可以对其进行扩展。
<?php
// ftp URL to file
$url = 'ftp://ftp.mozilla.org/pub/firefox/nightly/latest-firefox-3.6.x/firefox-3.6.29pre.en-US.linux-i686.tar.bz2';
// init curl session with FTP address
$ch = curl_init($url);
// specify a callback function for reading data
curl_setopt($ch, CURLOPT_READFUNCTION, 'readCallback');
// send download headers for client
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="backup.tar.bz2"');
// execute request, our read callback will be called when data is available
curl_exec($ch);
// read callback function, takes 3 params, the curl handle, the stream to read from and the maximum number of bytes to read
function readCallback($curl, $stream, $maxRead)
{
// read the data from the ftp stream
$read = fgets($stream, $maxRead);
// echo the contents just read to the client which contributes to their total download
echo $read;
// return the read data so the function continues to operate
return $read;
}
有关该选项的更多信息,请参阅curl_setopt() 。CURLOPT_READFUNCTION