我正在开设一个商店系统,我有以下链接http://cmstutorials.org/shop/downloads/2793156879(原始链接是cmstutorials.org / shop / downloads.php?download = 2793156879)
我要做的是让用户下载与id 2793156879匹配的项目,而不显示文件的实际链接。就像他们在themeforest.net上一样
我该怎么做?
答案 0 :(得分:2)
此示例可以帮助您:
$len = filesize($filename);
header("Content-type: image/jpeg");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=\"$new_filename\"");
readfile($filename);
或另一个,对我来说看起来更简单:
<?php
header('Content-type: image/jpeg');
$f = file_get_contents('path/to/image.jpg');
print $f;
?>
PS当然,您content-type
必须适合您的文件。
答案 1 :(得分:1)
标头(),否则会抛出此错误。
答案 2 :(得分:0)
wooohoooo
非常感谢,这个网站规则我总能得到正确答案:D
我将其粘贴在header.php上方,包括 ob_start();
就在标题函数 ob_ get_clean();
之前可能对人们有用(注意:对于第二个函数,我在get之前添加了一个空格,以便正确显示,不要忘记在使用它时将其删除)
答案 3 :(得分:0)
如果你打算尝试扩展这项服务,我建议你去看看perlbal。其中一个巧妙的技巧是你的应用程序可以发送一个特殊的标题,告诉perlbal为另一个服务器提供静态文件。这样,您就不需要将PHP线程与向下推送到客户端。
答案 4 :(得分:0)
内容处理没问题,但另一种解决方案是使用PATH_INFO并以这种方式获取文件:
http://example.com/download.php/2793156879.zip
你的download.php就像
// handle path_info
$filename=$_SERVER['PATH_INFO']; // gets "/2793156879.zip" as $filename
// do smtg w/ $filename...
// ...
// download
$len = filesize($filename);
header("Content-type: application/force-download");
header("Content-Length: $len");
readfile($filename);
注意:应用程序/强制下载不存在,它只是强制下载每个浏览器。 (有些MSIE似乎在应用程序/八位字节流方面遇到了麻烦)
这种方法的优点是可以与所有浏览器一起使用:即使是非常旧的浏览器,也不支持“Content-Disposition:”标题。
你必须从PATH_INFO字符串中自己使用substr()产品代码