如何在不使用主机带宽传输的情况下从其他FTP主机读取文件

时间:2015-06-04 04:24:51

标签: php ftp

我有一个用于存储数据的主机和一个下载主机(该主机没有数据库)。我想从商店主机中的下载主机中读取文件并将其提供给用户下载,但我不想使用商店主机的每月带宽传输 当用户下载文件时,只需使用下载主机带宽传输。

我知道有两种方式:

  1. 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);
    
  2. 当用户下载文件时,我不知道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;
    
  3. 我不想在商店主机中使用带宽传输;我可以用哪种方式?方式2还是其他方式?

1 个答案:

答案 0 :(得分:0)

无法从"下载主机"下载内容。直接向客户端提供,无需向客户提供下载所需的所有信息("下载链接")。

如果您需要隐藏客户端的下载信息,则需要在"商店主机上下载文件"然后将其转发给客户端。因此,您正在使用"商店主机"的带宽数据。您使用的技术,协议或功能无关紧要。而ftp_getfile_get_contents("ftp://...")无论如何都使用相同的代码。

简单地说,没有办法隐藏客户端的下载信息,也没有使用"商店主机的带宽数据"。