文件下载部分
从 down 目录下下载,先获取目录下所有文件,再为每个文件添加download 信息,主要是文件名,后缀的关系。
分两部分,down_1.php 部分初始化,点击download 则跳转 down_2.php 处理传送过来的数据(文件名id).
主要源码如下(主要使用了简单的php 与 “table" 处理:
部分效果显示:
down_1.php :
<?php // 查找所有文件信息........ class document{ public $file_array = array(); public $foder_array = array(); public $all_array = array(); // 查找目录下所有文件 function fetch($dir){ $H = opendir($dir); while(false !==($_file=readdir($H))){ if(is_dir($dir."/".$_file)&&$_file !="."&&$_file !=".."&&$_file !="Thumbs.db"){ array_push($this -> folder_array,$dir."/".$_file); $this ->fetch($dir."/".$_file); } else if(is_file($dir."/".$_file)&&$_file !="."&&$_file !=".."&&$_file !="Thumbs.db"){ array_push($this -> file_array,$dir."/".$_file); } } closedir($H); $this->all_array['foder'] = $this -> foder_array; $this ->all_array['file'] = $this ->file_array; return $this ->all_array; } } // 实例化,从 down 文件夹中找文件 $d = new document(); $f = $d -> fetch("../down"); $ff = $f['file']; $sum = count($ff); echo "<table align=center border=1 cellpadding=5>"; echo "<tr><td align=center>file_name</td><td>download</td></tr>"; for($i = 0;$i<$sum;$i++) { echo "<tr><td>$ff[$i]</td><td><a href=index.php?id=$ff[$i]>download</a></td></tr>"; } echo "</table>"; ?>
down_2.php:
<?php /* 下载文件 */ // 设置文件查找的限制--条件 class dl{ var $language = "CN"; var $allow = array(".gif",".jpg",".txt",".exe",".php","png"); var $serverPath = "./"; //设置出错语言及出错信息 var $message_CN = array( "0" => "未找到文件", "1" => "不允许下载此类型文件" ); var $message_EN = array( "0" => "this file does not exists", "1" => "can't download this kind of file" ); // 构造函数建值 function __construct($serverPath){ $this ->serverPath = $serverPath; if($this ->language == "CN") $this ->message = $this->message_CN; else $this ->message = $this ->message_EN; } // 由后缀查找,并设置错误返回方式 function get_ext($file){ $file_ext = substr($file,-4); if(!file_exists($this->serverPath."/".$file)){ $this ->error("0"); } if(!in_array($file_ext,$this->allow)){ $this ->error("1"); } } function error($i){ die ($this->message[$i]); } // 下载文件开始, 需要设置多个 Content-Type function download($filename,$mimeType = "application/octet-stream"){ $this ->get_ext($filename); $fullname = $this->serverPath."/".$filename; header("Content-Type : { $mimeType }"); $filename = "".htmlspecialchars($filename).""; $filesize = filesize($fullname); header("Content-Disposition : attachment; filename = {$filename} ; charset = gb2312"); header("Content-length : {$filesize}"); readfile($fullname); exit; } } // 实例化.. $d = new dl("../down"); $ss = $_GET['id']; $pieces = explode("/",$ss); $d ->download($pieces[2]); ?>
上传文件部分:
也是通过解析文件名以及后缀,但外加了一个随机构造文件名的方法,以防文件名重复。上传至up 目录下。
提供了文件浏览功能,其实就是< img src="uploadfile"/> 就解析出来了。
部分效果图:
up_1.php 部分:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <script language="javascript" type="text/javascript"> </script> </head> <body> <center><h3> Upload files</h3></center>; <form name=from1 method="post" action="edit.php" enctype="multipart/form-data"> <table border=1><tr> <td><input type="file" name="file" maxlength="40" value="浏览"/></td> <td><input type="submit" name="submit" value="上传"/></td> </tr></table> </form> </body> </html>
up_2.php 部分:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <script language="javascript" type="text/javascript"> </script> </head> <?php #============================================== /* 上传文件 */ // 先设置上传目录 及支持类型文件 $uploaddir = "../up"; $type = array("jpg","gif","txt","php","jpeg"); // 获取文件后缀 function fileext($filename){ return substr(strchr($filename,"."),1); } // 为不使文件名重复,使用随机数生成新文件 function random($length){ $hash = "CR-"; $chars = "ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwxyz0123456789"; $max = strlen($chars) - 1; mt_srand(((double)(microtime() * 1000000))); for($i = 0; $i<$max; $i++) $hash .= $chars[mt_rand(0,$max)]; return $hash; } // 文件上传 处理 $a = strtolower(fileext($_FILES['file']['name'])); if( !in_array($a,$type)) { $text = implode(",",$type); echo "Sorry, you can just upload these kinds of file :".$text."<br/>"; } else { $filename = explode(".",$_FILES['file']['name']); do{ $filename[0] = random(10); $name = implode(".",$filename); $uploadfile = $uploaddir.$name; }while(file_exists($uploadfile)); if( move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile)) if($_FILES['file']['size'] > 0) { echo "<center> File upload success ! 预览 :<img src='$uploadfile'/> </center>"; echo "<center> <a href=delete.php>继续上传</a></center>"; } else echo "Failed in uploading !"; } ?> </html>
文件的上传下载涉及了很多格式,有些类型的文件需要特殊处理,===================================