2009-10-03 96 views
1

我正在一家商店的系统上,我有以下链接http://cmstutorials.org/shop/downloads/2793156879(原链接cmstutorials。组织/店/ downloads.php?下载= 2793156879)下载链接隐藏

我想要做的让用户下载与ID为2793156879相匹配的项目,而不显示该文件的实际链接。就像他们在themeforest.net上一样

我该怎么做?

+0

这个ID是一个常量? – 2009-10-03 16:20:07

回答

0

wooohoooo

感谢很多人,这个网站的规则,我总是得到正确的答案:d

我贴这个的header.php上述包括ob_start();

和之前的标题功能ob_ get_clean();

可能是有用的人(注:第二个功能我添加了一个空间之前得到这样它会显示正确,不要忘了当u用它来删除它)

+0

现在你应该标记最有用的答案......除非你不再需要帮助...... – IProblemFactory 2009-10-03 17:05:29

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适合您的文件。在发送任何实际输出(回声)之前

+0

第一个示例应该可以工作,并且是必要的,以便浏览器知道该调用该文件的内容。 – 2009-10-03 20:10:06

0

如果您我会尝试扩展这项服务,我建议你看看perlbal。它所做的一个巧妙的技巧是,你的应用程序可以发送一个特殊的头文件,告诉perlbal为另一台服务器提供静态文件。这样您就不需要绑定一个PHP线程并将位向下推送到客户端。

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()你自己的产品代码