首页 文章

PHP文件下载与原始文件名

提问于
浏览
0

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

这应该适用于直接链接到文件(“foo.bar/test.zip”)和通过PHP文件代理的下载(“foo.bar/download.php?fileid=12345”< - 这将打开一个保存-as以test.zip作为给定名称提示) . PHP中是否有可能用来做这个?

我尝试了不同的可能性(fopen,cURL,file_get_content等) . 但是我发现的所有可能性都要求我手动设置新文件名以便在本地保存 .

如果我可以通过我的脚本(使用它的原始名称!)将远程文件代理到正在调用脚本的客户端,而不是暂时保存它,那就更好了 . 我找到了以下代码片段来完成这件事

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

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

任何想法如何实现这一点将非常感激 .

提前致谢!

1 回答

  • -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替换为您要下载的文件即可 .

相关问题