PHP+Mysql+jQuery實現檔案下載次數統計

來源:互聯網
上載者:User

標籤:儲存   點擊下載   otto   close   cti   radius   操作   round   資料表   

資料表
CREATE TABLE IF NOT EXISTS `downloads` ( 
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT, 
  `filename` varchar(50) NOT NULL, 
  `savename` varchar(50) NOT NULL, 
  `downloads` int(10) unsigned NOT NULL DEFAULT ‘1‘, 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `filename` (`filename`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

HTML<div id="demo"> <ul class="filelist"> </ul> </div>CSS#demo{width:728px;margin:50px auto;padding:10px;border:1px solid #ddd;background-color:#eee;} ul.filelist li{background:url("img/bg_gradient.gif") repeat-x center bottom #F5F5F5; border:1px solid #ddd;border-top-color:#fff;list-style:none;position:relative;} ul.filelist li.load{background:url("img/ajax_load.gif") no-repeat; padding-left:20px; border:none; position:relative; left:150px; top:30px; width:200px} ul.filelist li a{display:block;padding:8px;} ul.filelist li a:hover .download{display:block;} span.download{background-color:#64b126;border:1px solid #4e9416;color:white; display:none;font-size:12px;padding:2px 4px;position:absolute;right:8px; text-decoration:none;text-shadow:0 0 1px #315d0d;top:6px; -moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;} span.downcount{color:#999;padding:5px;position:absolute; margin-left:10px;text-decoration:none;}

jQuery前端頁面jQuery主要完成兩個任務,一是通過Ajax非同步讀取檔案清單並展示,二是響應使用者點擊事件,將對應的檔案下載次數+1,來看代碼:$(function(){     $.ajax({ //非同步請求         type: ‘GET‘,         url: ‘filelist.php‘,         dataType: ‘json‘,         cache: false,         beforeSend: function(){             $(".filelist").html("<li class=‘load‘>正在載入...</li>");         },         success: function(json){             if(json){                 var li = ‘‘;                 $.each(json,function(index,array){                     li = li + ‘<li><a href="download.php?id=‘+array[‘id‘]+‘">‘+array[‘file‘]+             ‘<span class="downcount" title="下載次數">‘+array[‘downloads‘]+‘</span>             <span class="download">點擊下載</span></a></li>‘;                 });                 $(".filelist").html(li);             } 
         
        $(‘ul.filelist a‘).on(‘click‘,function(){             var count = $(‘.downcount‘,this);             count.text( parseInt(count.text())+1); //下載次數+1         }); 
    }  
  });

首先,頁面載入完後,通過$.ajax()向後台filelist.php發送一個GET形式的Ajax請求,當filelist.php相應成功後,接收返回的json資料,通過$.each()遍曆json資料對象,構造html字串,並將最終得到的字串加入到ul.filelist中,形成了demo中的檔案清單。 然後,當點擊檔案下載時,通過on()響應動態加入的列表元素的click事件,將下載次數進行累加。
  PHP 為了更好的理解,我們分兩個PHP檔案,一個是filelist.php,用來讀取mysql資料表中的資料,並輸出為JSON格式的資料用來給前台index.html頁面調用,另一個是download.php,用來響應下載動作,更新對應檔案的下載次數,並且通過瀏覽器完成下載。其實還有一個資料庫連接檔案conn.php, filelist.php讀取downloads表,並通過json_encode()將資料以JSON格式輸出,這樣是為下面的Ajax非同步作業準備的。
conn.php

  <?php
  $host="localhost";
  $db_user="root";
  $db_pass="";
  $db_name="test";
  $timezone="Asia/Shanghai";

   $link=mysqli_connect($host,$db_user,$db_pass);

  mysqli_select_db($link,$db_name);
  mysqli_query($link,"SET names UTF8");
  header("Content-Type: text/html; charset=utf-8");

?>

  
filelist.php
require ‘conn.php‘; //串連資料庫 $result = mysql_query("SELECT * FROM downloads"); if(mysql_num_rows($result)){     while($row=mysql_fetch_assoc($result)){         $data[] = array(             ‘id‘ => $row[‘id‘],             ‘file‘ => $row[‘filename‘],             ‘downloads‘=> $row[‘downloads‘]         );     }     echo json_encode($data); } download.php根據url傳參,查詢得到對應的資料,檢測要下載的檔案是否存在,如果存在,則更新對應資料的下載次數+1,並且使用header()實現下載功能。值得一提的是,使用header()函數,強制下載檔案,並且可以設定下載後儲存到本地的檔案名稱。一般情況下,我們通過後台上傳程式會將上傳的檔案重新命名後儲存到伺服器上,常見的有以日期時間命名的檔案,這樣的好處之一就是避免了檔案名稱重複和中文名稱亂碼的情況。而我們下載到本地的檔案可以使用header("Content-Disposition: attachment; filename=" .$filename )將檔案名稱設定為易於識別的檔案名稱。
download.php

require(‘conn.php‘);//串連資料庫 $id = (int)$_GET[‘id‘]; if(!isset($id) || $id==0) die(‘參數錯誤!‘); $query = mysql_query($link,"select * from downloads where id=‘$id‘"); $row = mysql_fetch_array($query); if(!$row) exit; $filename = iconv(‘UTF-8‘,‘GBK‘,$row[‘filename‘]);//中文名稱注意轉換編碼 $savename = $row[‘savename‘]; //實際在伺服器上的儲存名稱 $myfile = ‘file/‘.$savename; if(file_exists($myfile)){//如果檔案存在 //更新下載次數 mysqli_query($link,"update downloads set downloads=downloads+1 where id=‘$id‘"); //下載檔案 $file = @ fopen($myfile, "r"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=" .$filename ); while (!feof($file)) { echo fread($file, 50000); } fclose($file); exit; }else{ echo ‘檔案不存在!‘; }

 

PHP+Mysql+jQuery實現檔案下載次數統計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.