【问题标题】:PHP File download with original filename使用原始文件名下载 PHP 文件
【发布时间】:2016-03-25 02:13:21
【问题描述】:

我正在寻找使用 PHP 下载文件并保留其原始名称的可能性。

这应该适用于文件的直接链接(“foo.bar/test.zip”)和通过 PHP 文件代理的下载(“foo.bar/download.php?fileid=12345”

我尝试了不同的可能性(fopen、cURL、file_get_content 等)。但我发现的所有可能性都需要我手动设置新文件名才能将其保存在本地。

如果我可以通过我的脚本(使用它的原始名称!)将远程文件代理到调用脚本的客户端,而不临时保存它,那就更好了。 我发现以下 sn-p 可以完成这个确切的事情

$fp = fopen($_POST["url"], 'rb');
foreach (get_headers($_POST["url"]) as $header)
{
    header($header);
}
fpassthru($fp);

我要下载的文件大小合适,但名称错误(它具有调用的 PHP 脚本的名称,在我的例子中是 downloader.php 而不是 test.zip)。

任何想法如何实现这一点将不胜感激。

提前致谢!

【问题讨论】:

    标签: php curl download


    【解决方案1】:

    可能这样的事情会有所帮助:

    $quoted = sprintf('"%s"', addcslashes(basename($file), '"\\'));
    $size   = filesize($file);
    
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $quoted); 
    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: ' . $size);
    

    只需将 $file 替换为您要下载的文件即可。

    【讨论】:

    • 谢谢,如果我使用文件的直接链接,这将有效。但是,如果我使用指向将请求的文件代理给我的 php 文件的链接,它将不起作用。您知道我如何实现这一目标吗?
    • 你在代理脚本中使用了什么?
    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多