PHP与MySQL的文件下载计数器(二) 20分,无满意结帖,结帖人newcnzz]

发布时间:2017-2-23 10:34:26 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"PHP与MySQL的文件下载计数器(二) 20分,无满意结帖,结帖人newcnzz]",主要涉及到PHP与MySQL的文件下载计数器(二) 20分,无满意结帖,结帖人newcnzz]方面的内容,对于PHP与MySQL的文件下载计数器(二) 20分,无满意结帖,结帖人newcnzz]感兴趣的同学可以参考一下。

接上一篇  :PHP与MySQL的文件下载计数器(一)http://www.software8.co/wzjs/PHPshili/402.html 第3步 - PHP 正如前面提到的,PHP遍历的文件夹,每个文件输出作为锂元素的无序列表。现在,让我们仔细看看这是如何发生的。 demo.php - 返回顶端部分   01 // 错误报告:  02 error_reporting(E_ALL^E_NOTICE); 03  04 // I包括的数据库连接文件 05 require 'connect.php';  06  07 $extension=''; 08 $files_array = array();  09  10 /* Opening the thumbnail directory and looping through all the thumbs: */ 11  12 $dir_handle = @opendir($directory) or die("There is an error with your file directory!");  13  14 while ($file = readdir($dir_handle))  15 { 16     /* Skipping the system files: */ 17     if($file{0}=='.') continue;  18  19     /* end() returns the last element of the array generated by the explode() function: */ 20     $extension = strtolower(end(explode('.',$file)));  21  22     /* Skipping the php files: */ 23     if($extension == 'php') continue;  24  25     $files_array[]=$file;  26 } 27  28 /* Sorting the files alphabetically */ 29 sort($files_array,SORT_STRING); 30  31 $file_downloads=array(); 32  33 $result = mysql_query("SELECT * FROM download_manager");  34  35 if(mysql_num_rows($result)) 36 while($row=mysql_fetch_assoc($result)) 37 { 38     /*  The key of the $file_downloads array will be the name of the file,  39         and will contain the number of downloads: */ 40  41     $file_downloads[$row['filename']]=$row['downloads'];  42 }   请注意我们是如何选择mysql_query()的从download_manager表的所有行,以及后来将其添加到的$ file_downloads数组的文件名 ​​作为一键下载的数量。这样一来,后面的代码中,我们可以写$ file_downloads为“Archive.zip'] ,并输出该文件已被下载多少次。 你可以看到代码中,我们使用生成的以下项目。 demo.php - 中   1 foreach($files_array as $key=>$val)  2 { 3     echo '<li><a href="download.php?file='.urlencode($val).'">'.$val.'  4         <span class="download-count" title="Times Downloaded">'.(int)$file_downloads[$val].'</span> <span class="download-label">download</span></a> 5     </li>';  6 }   这是简单-一个上的$ files_array数组的foreach循环,和echo语句打印所有的页面的标记。 现在,让我们仔细看看究竟是如何下载跟踪。   download.php   01 // Error reporting:  02 error_reporting(E_ALL^E_NOTICE); 03  04 // Including the connection file:  05 require('connect.php'); 06  07 if(!$_GET['file']) error('Missing parameter!');  08 if($_GET['file']{0}=='.') error('Wrong file!');  09  10 if(file_exists($directory.'/'.$_GET['file'])) 11 { 12     /* If the visitor is not a search engine, count the downoad: */ 13     if(!is_bot())  14     mysql_query("   INSERT INTO download_manager SET filename='".mysql_real_escape_string($_GET['file'])."' 15                     ON DUPLICATE KEY UPDATE downloads=downloads+1");  16  17     header("Location: ".$directory."/".$_GET['file']);  18     exit;  19 } 20 else error("This file does not exist!");  21  22 /* Helper functions: */ 23  24 function error($str)  25 { 26     die($str);  27 } 28  29 function is_bot()  30 { 31     /* This function will check whether the visitor is a search engine robot */ 32  33     $botlist = array("Teoma", "alexa", "froogle", "Gigabot", "inktomi",  34     "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory",  35     "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot",  36     "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp",  37     "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz",  38     "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot",  39     "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot",  40     "Butterfly","Twitturls","Me.dium","Twiceler");  41  42     foreach($botlist as $bot)  43     {  44         if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)  45         return true;    // http://www.heatpress123.net/ 46     }  47  48     return false;   // Not a bot  49 } 重要的是要检查的,任何的机会,如果访问者是搜索引擎机器人扫描您的链接,而不是一个真正的人。机器人是一件好事,因为他们让你像谷歌搜索服务,但像这样的情况,可以扭曲下载数据。这就是为什么更新数据库中的行后,才访问者通过is_bot的()验证。   第4步 - MySQL的 在上一步中提到,下载次数储存在你的MySQL数据库作为行在download_manager表。首先,让我们解释这个特定的查询是如何工作的: download.php   1 INSERT INTO download_manager SET filename='filename.doc' 2 ON DUPLICATE KEY UPDATE downloads=downloads+1 它告诉MySQL插入新行在download_manager表,并设置文件名 ​​的行领域的价值所请求的文件下载。然而,文件名 ​​的字段被定义作为一个唯一的索引表中。这意味着,一排可以只插入一次,重复键错误,否则将发生。 这是第二部分的查询踢- ON DUPLICATE KEY UPDATE告诉MySQL下载列递增,如果该文件已经存在于数据库中。 这样一来,新的文件将被自动插入到数据库中的他们第一次被下载。 的download_manager表的结构   第5步 - jQuery的 下载跟踪的感觉几乎像真正的时间,这将是一个很好的补充更新的文件名旁边的柜台,一旦用户启动下载。否则,他们将不得不启动页面刷新,使新的计数器的统计资料显示。 我们将做到这一点,一点点的jQuery技巧: script.js   $(document).ready(function(){      /* This code is executed after the DOM has been completely loaded */     $('ul.manager a').click(function(){         var countSpan = $('.download-count',this);          countSpan.text( parseInt(countSpan.text())+1);      });  });   我们仅仅给一个click处理程序的链接指向的文件,每次被点击其中一个,我们增加的数量内的计数器span标记。   第6步 - htaccess文件 我们需要做的是一件事之前,我们收工了。什么的download.php是访问者重定向到所请求的文件作为参数传递。然而,你可能已经注意到,某些文件类型,默认浏览器的行为是直接打开它们。我们要启动一个下载。这是实现与一对夫妇的线内。htacess文件,发现在文件目录中:   1 <Files *.*>  2 ForceType application/octet-stream  3 </Files>   结论 要运行演示自己的服务器上,你会需要,重建download_manager您可以访问MySQL数据库的表中。您可以找到所需要的SQL代码,将创建该表为您table.sql,在下载压缩包,你可以找到。 在此之后,只需添加你登录的详细信息的数据库(您的虚拟主机提供商所提供的)的configuration.php。 原文地址:http://www.software8.co/wzjs/PHPshili/403.html

上一篇:TFS2010高级配置中为何没有报告这项 40分,无满意结帖,结帖人jimyboy]
下一篇:求专人指导 50hulei_net]

相关文章

相关评论