【问题标题】:Renaming File on another server as user downloads it [2] - using PHP当用户下载文件时在另一台服务器上重命名文件 [2] - 使用 PHP
【发布时间】:2009-05-01 12:37:45
【问题描述】:

我今天已经问过这个问题了,但这次我想知道我是否可以通过 PHP 来实现,因为 Javascript 不适合它。

我有一个指向另一台服务器上的文件的链接。如果我向我的用户提供此链接,则会推出标头以从该服务器下载该文件。

有没有办法让我捕获这些标头和文件并将下载重定向给用户?我想这样做,以便我可以更改下载的文件名,因为它是 总是'file.zip'。

PHP 可以做到这一点吗?

感谢您的帮助。

【问题讨论】:

    标签: php http file redirect http-headers


    【解决方案1】:

    您可以使用curl 将文件下载到您的服务器并正确提供它(带有Content-Disposition 标头)。只要您使用 HTTP,就无法仅发送标头并让另一个服务器将内容直接流式传输到客户端。

    【讨论】:

    • 一个例外:您可能会检查,源服务器是否支持 ftp。如果是,您可以尝试设置一个专门的 ftp 服务器,它只处理控制连接,让数据来自其他服务器。但是,我怀疑这是否值得。
    【解决方案2】:

    你可以做到这一点,你可以通过多种方式做到这一点。

    1) (简单)将文件复制到您的服务器,然后重命名。将您的下载链接指向此副本。
    2)(更难)创建一个存根php文件,称为,从php中的远程服务器读取文件,并将内容流式传输到脚本输出。这将需要您设置适当的标头等,并设置您的网络服务器以通过 PHP 进行解析。

    说真的,我会选择选项 1。(假设您拥有提供内容的合法权利等)

    【讨论】:

    • 您能否在第 2 部分中更详细地介绍一下 - :)。我可能会试一试!谢谢。
    • 我已经很久没有在 PHP 中做任何事情了,但基本上,设置一个内容类型标头以匹配您的输出文件;打开一个流来读取远程文件,然后将内容输出到浏览器。注意:由于文件必须进出,它会使您的带宽使用量翻倍。
    • 啊,我明白了,出于带宽原因,我会选择选项 1!
    • 如果您想使用选项 2,您需要设置 Content-Disposition: 标头。更多信息在这里:en.wikipedia.org/wiki/MIME#Content-Disposition
    【解决方案3】:

    也许您可以使用类似于以下的脚本:

    <?php
      header("HTTP/1.1 301 Moved Permanently");
      header("Location: http://www.example.com/the_path/file.zip");
      header('Content-Disposition: attachment; filename="alternate_filename.zip"');
      exit();
    ?>
    

    【讨论】:

    • 不。使用 GNU Wget 1.11.3、Epiphany 2.18.2 (Gecko 1.8) 和 Opera 9.52 for Linux 进行测试:在所有三种情况下,下载时都使用了真实文件名“file.zip”。
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多