<?php
$dir=$HTTP_GET_VARS["dir"]; //.......取得上个页面传递来的路径
$file=$HTTP_GET_VARS["file"]; //.......取得传递来的文件名
$url=parse_url($HTTP_REFERER); /*......取得前一页面的URL地址,并将其放入一个数组中*/
if($url[host]!=$HTTP_HOST){echo "要下载本软件请到<a href=http://www.df365.org>东方小屋</a>";exit;} /*检查来源网站是不是自己的网站,如果不是,返回“要下载本……”*/
if(empty($dir))$dir="/"; //......如果路径名为空,则为指定根目录
if(empty($file)){echo "未指定要下载的文件!";exit;} /*如果文件名为空,返回“未指定……”*/
$rootdir="文件存放的根目录";//......你的下载路径根目录 
$realurl=$rootdir.$dir; //.......取得你的下载目录
chdir($realurl); //......将当前目录转到下载目录中
if(!file_exists($file)){echo "对不起,此链接已经失效,请在下载页面上向我们报告,谢谢!";exit;} //......测试文件是否存在
$filename=$file; 
//  发送文件头信息
header("Cache-control: private"); // fix for IE 
header("Content-Type: application/octet-stream"); 
header("Content-Length: ".filesize($filename)); 
header("Content-Disposition: attachment; filename=$filename"); 
$fp = fopen($filename, 'r'); // 以读取方式打开指定文件
fpassthru($fp); // ** CORRECT ** 以二进制方式读取文件
fclose($fp); // 关闭文件
?>

解决方案 »

  1.   

    http://www.phpx.com/happy/thr65431.html这篇文章。
    针对网页上做防盗链没什么好办法。
    最好是在服务器端加强。
      

  2.   

    我试过还不错
    //以下内容为程序代码:
    <?php
    require_once ("./inc/global.php");
    require_once ("./inc/mysql4.php");
    $id = $_GET['id'];
    $db = open_db();
    if ($result = $db->sql_query("SELECT * FROM ring WHERE id = '$id'")) {
      $row = $db->sql_fetchrow($result);
      $file = $row['file'];
      $size = $row['size'];
      send_midi($id, $file, $size);
    } else {
      require_once ("function.php");
      err404();
    }function send_midi($id, $file, $size) {
      header ("Content-type: audio/midi");
      header ("Content-length: $size");
      header ("Content-Disposition: attachment; filename=\"".$id.".mid\"");
      echo ($file);
    }
    ?>
    这样可以通过判断HTTP_REFERER或者用会员认证的方式来提供下载,因为永远看不到真实路径。不过缺点是影响性能,而且似乎不支持续传(未验证)。实际演示在http://wap.yeesee.net/browser.php,点开一个midi后,里面会出现下载地址,而你无论用什么方法,都看不到实际地址。(本例中文件存储在数据库中,实际使用时候你可以不这么做,readfile就行)
      

  3.   

    Apache 下防止盗链的解决办法 
    註:以下說明對於WIN+IIS架站的人,是無效的,不要一直問我為什麼無效...@@以下是以UNIX(FREEBSD..LINUX等)+APACHE架站的人適用
    只要設定1次,就不需再去設別的資料,
    你也不需要1個1個去擋盜連來源的IP,這樣開站豈不是太累人了??? 
    一天到晚要去檢查LOG...@@首先在你的網站根目錄下開個.htaccess這個檔案,裡面寫下面資料:
    以下是用PCZONE當例子,請換成你自己的網址
    (如果你不是實體主機,沒有自己的固定IP,下面第3列的IP資料就不用去設定ㄛ)SetEnvIfNoCase Referer "^http://www\.pczone\.com\.tw/" local_ref=1
    SetEnvIfNoCase Referer "^http://pczone\.com\.tw/" local_ref=1
    SetEnvIfNoCase Referer "^http://202\.43\.85\.163/" local_ref=1
    <FilesMatch "\.(txt|doc|gif|jpg|mp3)"> <--這邊隨你喜好自己設
    Order Allow,Deny
    Allow from env=local_ref
    Allow from 127.0.0.1
    </FilesMatch>當你這樣寫好後,把檔案擺到網站的根目錄就OK 
    你網站上的檔案(凡是上面有設定到的,像TXT、DOC...)只能從站內被取用,
    如果有人的來源是其它網站,因為來源IP不是你所允許的127.0.0.1主機內部,
    因此在你主機空間被你設定的檔案、圖片、MP3就不會被人順利盜連了....只要是經過你按上面步驟指名要求到的檔案
    不管是GIF圖檔、影音檔、壓縮檔、程式..還是其他有的沒的..
    只要你在.htaccess有設定到
    全部、統統都有防止盜連的效果
    這樣你的主機頻寬就不會被人給佔光或搞到流量破表被主機公司追債只要你設定過,訪客就無法直接盜連(除非用軟體抓網站,但這應該是叫做"下載"網站檔案..)
    .htaccess這9個字已經是完整的檔名,他沒有副檔名,千萬不要自己亂加副檔名,
    開頭的.號代表是隱藏檔的意思!經站友新的回報:WIN+APACHE可以使用上面的方法防止盜連 -----------------------------------------------------------------3月30日再補充以下教學:有人問說,如果要開放某些站台可以直接連結自己網站內的資料,該怎麼辦?例如你想開放pczone.com.tw站上的貼圖,可以直接從自己的網站被連結使用,
    那麼請在.htaccess檔案加入下面這新的3行字:(以下這樣設定代表:除了自己網站以及PCZONE網站,其他網站仍無法盜連你站內的資料)SetEnvIfNoCase Referer "^http://www\.pczone\.com\.tw/" local_ref=1
    SetEnvIfNoCase Referer "^http://pczone\.com\.tw/" local_ref=1
    SetEnvIfNoCase Referer "^http://自己網站的舊資料/" local_ref=
    <FilesMatch "\.(txt|doc|gif|jpg|mp3)"> 
    Order Allow,Deny
    Allow from env=local_ref
    Allow from 127.0.0.1
    Allow from 202.43.85.163 <-這個IP,是PCZONE網站的固定IP,一定要打進去!
    </FilesMatch>
     
    OK就這麼簡單
      

  4.   

    起初我只是想到用session来验证下载页面,可是session无法保护非php的东西:比如图片等……
    老大就是厉害PF