【问题标题】:PHP (or Flash) file download - set headers then redirectPHP(或 Flash)文件下载 - 设置标题然后重定向
【发布时间】:2011-06-20 12:01:28
【问题描述】:

我想这样做,没有“readfile()”部分:

header("Content-type: application/force-download"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file)); 
header("Content-disposition: attachment; filename="".basename($file)."""); 
readfile("$file"); 

基本上我正在尝试将下载转发到另一个 URL,但同时我需要能够设置像“文件名”这样的标题。

readfile($file) 函数不会为我做这件事,因为 $file 没有存储在与 PHP 脚本相同的服务器上(甚至不是相同的数据中心)

这甚至可能吗?如果不是通过 PHP,也许 FLASH 可以做到这一点?

【问题讨论】:

    标签: php flash


    【解决方案1】:

    如果你真的希望通过 PHP 以这种方式下载文件,你可以使用

    header("Content-disposition: attachment; filename=myfile.jpg");
      echo file_get_contents("http://host.tld/path/to/myfile.jpg")
    

    引自 Byron Whitlock 关于另一个 SO 问题 here。 他解释说这段代码会把文件放到临时存储中,所以会自动处理原始文件的下载和删除。

    如果您不必使用 PHP,您可以在页面上使用隐藏的 iFrame 来下载文件

    【讨论】:

    • 如果我使用 file_get_contents ,服务器必须首先从原始目的地下载 1GB 文件,然后将其推送到客户端。带宽组合 = 2 GB - 这就是我要避免的。
    • 如果我使用iframe,我将无法更改下载文件的文件名。
    • 即使您确实想从远程服务器下载它,file_get_contents 也会很糟糕。它在将整个文件输出给用户之前将其缓冲在内存中。在这种情况下,您应该使用readfile 流式传输文件而不将其全部缓冲在内存中。
    【解决方案2】:

    使用 PHP 执行此操作的唯一方法是 PHP 首先从远程服务器下载文件,然后将其发送给用户。您实际上可以为此使用readfile,因为它支持 fopen 包装器,只要您的服务器上启用了该选项。

    【讨论】:

    • 感谢您的回答,我不想这样做,因为我们正在谈论的文件大小可能是 1GB。我需要节省带宽。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多