我已经使用了很长时间了,但最终有一个问题我无法找到答案。我想使用我的网站将用户重定向到另一台服务器上托管的文件。起初我认为“这应该很容易”:
header("Location: $url")
但是,托管在另一台服务器上的文件只有一个uuid作为文件名,所以我想使用标头传递适当的mimetype和文件名(我知道)。我可以使用以下代码:
<?php
$filename = $_REQUEST["name"];
$filesize = $_REQUEST["size"];
$mimetype = $_REQUEST["mime"];
$url = $_REQUEST["url"];
// used to test
$filename = "example.txt";
$filesize = "2966";
$mimetype = "text/plain";
$url = "http://example.com";
header('Content-Type: ' . $mimetype);
header("Content-length: " . ($filesize + 0));
header('Content-Disposition: attachment; filename="' . $filename . '"');
// this just redirects to the page, ignoring the Content- headers
//header('Location: ' . $url);
// this works, but I suspect that it uses my server's bandwidth
readfile($url);
exit();
?>
我上面发布的方法确实向用户提供了下载,但它是否通过我自己的服务器传递下载?我可能会用这个下载很多文件,如果我不需要,我宁愿不使用自己的带宽。我意识到这可能是不可能的,但我很欣赏任何见解。
答案 0 :(得分:0)
简短的回答是,这是不可能的;浏览器只会查看提供文件的服务器的标头。
您需要通过服务器代理请求(没有缓存可以使带宽增加一倍),或者从支持您的要求下载站点文件的所有者。
答案 1 :(得分:0)
$file=fopen('http://example.com/example.txt','r');
header("Content-Type:text/plain");
header("Content-Disposition: attachment; filename="example.txt");
fpassthru($file);
适合我下载MP4文件。