1

I'm working on a shop system and I have the following link http://cmstutorials.org/shop/downloads/2793156879 (original link is cmstutorials. org/shop/downloads.php?download=2793156879)

what I'm trying to do is let the user download the item that matches with the id 2793156879 withouth showing the actual link to the file. Like they have on themeforest.net

how would I do this?

4

5 回答 5

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必须适合你的文件。

于 2009-10-03T16:21:29.007 回答
1

header () 必须在发送任何实际输出(echo)之前调用,否则会抛出此错误。

参见“示例 2”:http ://www.w3schools.com/php/func_http_header.asp

于 2009-10-03T16:34:34.403 回答
0

呜呜呜

非常感谢大家,这个网站规则我总是得到正确的答案:D

我将它粘贴在 header.php 的上方 include ob_start( );

就在头函数ob_get_clean() 之前;

可能对人们有用(注意:对于第二个函数,我在 get 之前添加了一个空格,以便它可以正确显示,当你使用它时不要忘记删除它)

于 2009-10-03T17:00:19.233 回答
0

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

于 2009-10-03T20:08:46.233 回答
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);

注意: application/force-download 不存在,它只是用来强制每个浏览器下载。(一些 MSIE 似乎在使用 application/octet-stream 时遇到了问题)

这种方法具有适用于所有浏览器的优势:即使是非常旧的浏览器,也不支持“Content-Disposition:”标头。

它有一个小缺点,您必须自己从 PATH_INFO 字符串中 substr() 产品代码

于 2009-10-04T02:15:43.870 回答