ホームページ  >  記事  >  バックエンド開発  >  PHP Mysql と jQuery はファイルのダウンロード数の統計を実装します

PHP Mysql と jQuery はファイルのダウンロード数の統計を実装します

WBOY
WBOYオリジナル
2016-07-25 08:55:341048ブラウズ
  1. `downloads` が存在しない場合はテーブルを作成 (
  2. `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  3. `filename` varchar(50) NOT NULL,
  4. `savename` varchar(50) NOT NULL,
  5. `downloads` int(10) unsigned NOT NULL DEFAULT '1',
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `filename` (`filename`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
コードをコピー

デモを直接ダウンロードして SQL ファイルをインポートすることもでき、データはすべてそこにあります。

ダウンロード アドレス: PHP ファイルのダウンロード数統計のソース コード。

2番目、HTML部分

次の HTML 構造をindex.html ページ本体に追加します。ここでは、ファイル リストの表示に ul.filelist が使用されており、コンテンツはなくなり、jQuery がファイル リストの非同期読み取りに使用されます。 jQuery ライブラリ ファイルを HTML でロードする必要もあります。

  1. 3、CSS一部 デモでページの効果をより適切に表示できるようにするために、次のコードは主にファイル リストの表示効果を設定するために使用されます。 もちろん、実際のプロジェクトでは、必要に応じて対応するスタイルを設定できます。

#demo{width:728px;margin:50px auto;padding:10px;border:1pxソリッド#ddd;background-color:#eee;}

ul.filelist li{background:url("img/ bg_gradient.gif") リピート x 中央下 #F5F5F5;
border:1px ソリッド #ddd;border-top-color:#fff;list-style:none;position:relative;}
ul.filelist li.load{background :url("img/ajax_load.gif") no-repeat;
    border:none; 左:150px;
  1. ul.filelist; :block;padding:8px;}
  2. ul.filelist li a:hover .download{display:block;}
  3. span.download{background-color:#64b126;border:1px Solid #4e9416;color:white
  4. display: none;font-size:12px;padding:2px 4px;position:absolute;right:8px;
  5. text-decoration:none;text-shadow:0 0 1px #315d0d;top:6px; 3px;-webkit-border-radius:3px;border-radius:3px;}
  6. span.downcount{color:#999;padding:5px;position:absolute; margin-left:10px;text-decoration:none;}
  7. コードをコピー
  8. 4、PHP部分
わかりやすくするために、これは 2 つの PHP ファイルに分かれています。1 つは filelist.php で、mysql データ テーブルのデータを読み取り、フロントエンドのindex.html ページを呼び出すためにデータを JSON 形式で出力するために使用されます。もう 1 つは download.php で、ダウンロード アクションに応答するために使用されます。 、対応するファイルのダウンロード数を更新し、ブラウザ経由でダウンロードを完了します。 実際、データベース接続ファイル conn.php もダウンロード圧縮パッケージに含まれています。ここをクリックしてダウンロードしてください。 filelist.php は、ダウンロード テーブルを読み取り、json_encode() を通じて JSON 形式でデータを出力します。これは、次の Ajax 非同期操作のために準備されています。

require 'conn.php'; //データベースに接続します

$result = mysql_query("SELECT * FROM downloads"){

while ($ row=mysql_fetch_assoc($result)){
$data[] = array(
'id' => $row['id'],

    'file' => $row['filename'],
  1. 'ダウンロード '=> $row['ダウンロード']
  2. }
  3. echo json_encode($data)
  4. コードをコピーします。

    download.phpはURLに従ってパラメータを渡し、該当するデータを取得するためにクエリを実行し、ダウンロードするファイルが存在するかどうかを検出し、存在する場合は該当するデータのダウンロード数を+1して更新し、header()を使用します。ダウンロード機能を実装します。 header() 関数を使用することは言及する価値があります。 、ファイルを強制的にダウンロードし、ダウンロード後にローカルに保存されるファイル名を設定できます。

    通常の状況では、アップロードされたファイルは、バックグラウンドのアップロード プログラムによって名前が変更され、サーバーに保存されます。この利点の 1 つは、ファイル名の重複や中国語名の文字化けを回避できることです。 。 ローカルにダウンロードされたファイルの場合は、header("Content-Disposition:attachment; filename=" .$filename) を使用して、ファイル名を簡単に識別できるファイル名に設定できます。

    1. require('conn.php'); //データベースに接続します
    2. $id = (int)$_GET['id']
    3. if(!isset($id); ) | $id==0) die('パラメータが間違っています!');
    4. $query = mysql_fetch_array($query); if( !$row) exit;
    5. $filename = iconv('UTF-8','GBK',$row['filename']);//中国語名の変換エンコーディングに注意してください
    6. $savename = $row['savename']; //サーバー上の実際の保存名
    7. $myfile = 'file/'.$savename
    8. if(file_exists($myfile)){//ファイルが存在する場合
    9. //ダウンロード時間を更新します
    10. mysql_query("update downloads set downloads =downloads+1 where id='$id'");
    11. //ファイルをダウンロード
    12. $file = @ fopen($myfile, "r"); application/octet-stream");
    13. header("Content-Disposition:attachment; filename=" .$filename );
    14. while (!feof($file)) {
    15. echo fread($file, 50000);
    16. }
    17. fclose($file);
    18. exit ;
    19. }else{
    20. echo 'ファイルが存在しません! ';
    21. }
    22. コードをコピー
    5、jQuery部分 フロントエンドページの jQuery は主に 2 つのタスクを実行します。1 つは、Ajax を介してファイルリストを非同期に読み取って表示することです。もう 1 つは、ユーザーのクリックイベントに応答して、対応するファイルのダウンロード数を 1 増やすことです。
    コード:

    $(function(){
  5. $.ajax({ //非同期リクエスト
  6. type: 'GET',
  7. url: 'filelist.php',
  8. dataType: 'json',
  9. キャッシュ: false、
  10. beforeSend: function(){
  11. $(".filelist").html("
  12. 読み込み中...
  13. ");
  14. 成功: function(json){
  15. if(json){
  16. var li = '';
  17. $.each(json,function(index,array){
  18. li = li + '
  19. '+array['file']+
  20. ''+ array ['ダウンロード']+'
  21. クリックしてダウンロード
  22. '
  23. $( " .filelist").html(li);
  24. }
  25. }
  26. });
  27. $('ul.filelist a').live('click',function(){
  28. var count = $('.downcount' , this);
  29. count.text(parseInt(count.text())+1); //ダウンロード数+1
  30. });
  31. まず、ページがロードされます最後に、$.ajax() を通じてバックグラウンドの filelist.php に GET の形式で Ajax リクエストを送信します。 filelist.php が正常に応答すると、返された json データを受け取り、$.each() を通じて json データ オブジェクトを走査します。そして HTML 文字列を構築します。 そして、最後の文字列を ul.filelist に追加して、デモのファイル リストを形成します。
  32. その後、ファイルがクリックされてダウンロードされると、動的に追加されたリスト要素のクリックイベントがlive()で応答され、ダウンロード数が蓄積されます。
最後に、この記事を読んだ後、これは一般的に使用される Ajax のケースであり、ダウンロードを実現するために PHP と mysql を組み合わせた知識もあります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。