PHP 简单处理--文件下载--文件上传

文件下载部分

从 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>

文件的上传下载涉及了很多格式,有些类型的文件需要特殊处理,===================================

原文地址:https://www.cnblogs.com/imwtr/p/4069140.html