设为首页 收藏本站
查看: 837|回复: 0

[经验分享] 文件下载统计php编程

[复制链接]

尚未签到

发表于 2015-11-17 10:52:15 | 显示全部楼层 |阅读模式
现在有许多站点下载文件都提供了统计功能,本文讨论的是如何使用php实现此功能,对于想隐藏下载文件路径,避免用户直接使用url下载的编程者,本文也具有一定的参考价值。实现环境:Linux+Apache+Php+Mysql
Windows98+PWS4+Php+Mysql
一、数据库结构
数据库中创建一个表,存储文件信息,包括文件编码、名称、下载路径、统计,相应的sql文件内容如下:
CREATE DATABASE dl_db;
CREATE TABLE dl_file (
   id varchar(6),
   name varchar(50),
   url varchar(200),
   count bigint(10)
);
INSERT INTO dl_file VALUES( '000001', 'test', 'test.zip', 0);
INSERT INTO dl_file VALUES( '000002', 'tif', 'download/123.tif', 0);
二、php编程
1、   函数文件
函数文件包括数据库连接初始化函数和提示信息显示函数。
dl_func.php3:
<?
       //初始化数据库连接的程序
function dl_dbconnect(){
              error_reporting(1+4);      //禁掉warning性错误
              $dl_in=0;
              $dl_in=mysql_connect("localhost:3306","root","123456");
              if(!dl_in) { //如果连接失败,退出
                     echo "数据库无法连接";
                     exit;
              }
              mysql_select_db("dl_db",$dl_in);
              return $dl_in;
       }
      
       //显示提示信息的函数
       function infopage($strInfo){
              echo "<script language='Javascript'>";
              echo "              window.alert('$strInfo');";
              echo "              history.back();";
              echo "</script>";
       }
?>

2、   下载连接页面
下载连接页面从数据库读取下载文件信息并显示。
filelist.php3:
<html>
<head><title>文件下载</title>
<script language="Javascript">
function newopen(url){
       window.open(url,"_self");
       return;
}
</script>
</head>
<?
require("dl_func.php3");
$dl_in=dl_dbconnect();
$strQuery="select * from dl_file order by id";
$dl_res=mysql_query($strQuery,$dl_in);
while($arr_dlfile=mysql_fetch_array($dl_res)){
       echo "<a href=/"Javascript:newopen('filedown.php3?id=$arr_dlfile[id]')/">";
       echo "$arr_dlfile[name]";
       echo "&nbsp;";
       echo "(下载次数:$arr_dlfile[count])";
       echo "<br>";
}
mysql_close($dl_in);
?>
</html>
3、   下载页面
当文件存在时,下载页面转到要下载的文件,如果发生错误,则显示提示信息。
filedown.php3:
<?
       require("dl_func.php3");
       $dl_in=dl_dbconnect();
       $strQuery="select url from dl_file where id='$id'";
       $dl_res=mysql_query($strQuery,$dl_in);
       if(!($arrfile=mysql_fetch_array($dl_res))){ //选择结果为空
              infopage("错误的id");
              exit;
       }else{
              $arr_temp=split("/",$arrfile[url]);
              $filename=$arr_temp[sizeof($arr_temp)-1];
              if(strlen(trim($filename))==0){//文件名称为空
                     infopage("错误的文件");
                     exit;
              }else{
                     $strQuery="update dl_file set count=count+1 where id='$id'";
                     mysql_query($strQuery,$dl_in);
                     header("Content-type: application/file");
                     header("Content-Disposition: attachment; filename=$filename");//缺省时文件保存对话框中的文件名称
                     header("location:$arrfile[url]");
                            //echo “this is test for echo-download”;
              }
       }
       mysql_close($dl_in);
?>
实现的原理是filelist.php3显示所有文件的连接,然后根据传递的id来得到文件的名称和路径,通过重新定位来下载文件。以上程序笔者测试过,运行正常。
文件url可以是本地的,也可以是其他服务器上的。
如果文件内容存储在数据库中,或者文件没有在httpftp的路径下,解决的方法可以利用将文件的内容echo出来取代header(“location:$arrfile[url]”),由于读取文件方法相对简单,这里不再赘述。
             版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140241-1-1.html 上篇帖子: ubuntu14.04 LEMP(linux+nginx+mysql+php5)构建环境 下篇帖子: Windows下配置 apache+php5及加载mysql模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表