我有一个用于存储数据的主机和一个下载主机(该主机没有数据库)。我想从商店主机中的下载主机中读取文件并将其提供给用户下载,但我不想使用商店主机的每月带宽传输 当用户下载文件时,只需使用下载主机带宽传输。
我知道有两种方式:
ftp_get
下载文件并将其保存在本地文件中,然后设置header
进行下载。我不想这样使用,因为在商店主机中下载文件。
// in store host
$local_file = 'app.apk';
$ftp_file = '/uploads/2015/06/1eb6a628c60bb69a6b6092d03e252c29.apk';
// download file and save it in local
ftp_get($conn_id , $local_file, $ftp_file, FTP_BINARY);
$file_name = 'app.apk';
$file_size = filesize($local_file);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $file_name);
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $file_size);
readfile($local_file);
当用户下载文件时,我不知道file_get_contents
使用商店主机的带宽传输。
// in store host
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $file_name);
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $file_size);
// readfile($local_file);
$c = file_get_contents('ftp://login:pass@download-host.com/uploads/2015/06/app.apk');
echo $c;
我不想在商店主机中使用带宽传输;我可以用哪种方式?方式2还是其他方式?
答案 0 :(得分:0)
无法从"下载主机"下载内容。直接向客户端提供,无需向客户提供下载所需的所有信息("下载链接")。
如果您需要隐藏客户端的下载信息,则需要在"商店主机上下载文件"然后将其转发给客户端。因此,您正在使用"商店主机"的带宽数据。您使用的技术,协议或功能无关紧要。而ftp_get
和file_get_contents("ftp://...")
无论如何都使用相同的代码。
简单地说,没有办法隐藏客户端的下载信息,也没有使用"商店主机的带宽数据"。