使用原始文件名

时间:2015-12-18 11:17:38

标签: php curl download

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

这应该适用于直接链接到文件(" foo.bar/test.zip")以及通过PHP文件代理的下载(" foo.bar/download.php? fileid = 12345"< - 这将以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 个答案:

答案 0 :(得分:-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替换为您要下载的文件。