PHP之路 WEB【第一篇】文件上传和下载

 一、 php.ini的配置信息

file_uploads = On /Off 是否允许文件上传
upload_max_filesize=2M 上传的文件的最大大小
upload_tmp_dir 上传文件放置的临时目录
max_file_uploads = 20 允许上文件的数量
post_max_size = 8M POST数据所允许的最大大小


注意配置:upload_max_filesize的大小一定要小于post_max_size的配置大小。

二、客户端表单上传

1、 表单必须是post提交
2、 上传的类型:enctype="multipart/form-data"
3、上传使用的表单项
	<input type="file" name=".." />
4.(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE,
	<input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/>
	注意:此字段必须在文件输入字段之前(常放在form标签后面)

三、服务器端接收

1. 使用$_FILES全局数组来接收上传信息
在每个上传的文件里,$_FILES中都会有5个属性:

error:上传的错误号:0--4
	0:表示没有发生任何错误。
	1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
	2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
	3:表示文件只被部分上传。
	4:表示没有上传任何文件。
	6:找不到临时文件夹
	7:文件写入失败
name:上传的文件名
size:文件的大小
type:文件类型
tmp_name: 临时文件

2:is_uploaded_file() //是否是上传文件
3:move_uploaded_file() //执行移动上传文件

四、 下载设置

header("Content-Type:类型"); //指定响应类型
header("Content-Disposition:attachment;filename=文件名"); //**执行下载文件名
header("Content-Length:文件大小");

readfile("./uploads/".$picname); //读取并输出图片内容;
<?php
//文件下载练习
$filename="./uploads/1.jpg";

header("Content-Disposition:attachment;filename=".$filename);

//指定下载文件的描述信息
readfile($filename);//将内容输出,以便下载。

?>
示例

五、上传demo

源码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>文件上传实例</title>
    </head>
    <body>
        <h3>1. 简单的上传处理:1.php</h3>
        <form action="1.php" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="myfile"/>
            <input type="submit" value="上传"/>
        </form>
        <br/><br/>
        
        <h3>2. 完整的上传处理:2.php</h3>
        <form action="2.php" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="myfile"/>
            <input type="submit" value="上传"/>
        </form>
        <br/><br/>
        
        <h3>3. 使用函数实现上传处理:3.php</h3>
        <form action="3.php" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="myfile"/>
            <input type="submit" value="上传"/>
        </form>
        <br/><br/>
        
        <h3>4. 使用函数实现多上传处理:4.php</h3>
        <form action="4.php" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="myfile1"/><br/><br/>
            文件:<input type="file" name="myfile2"/><br/><br/>
            文件:<input type="file" name="myfile3"/><br/><br/>
            <input type="submit" value="上传"/>
        </form>
        <br/><br/>
        
        <h3>5. 使用函数实现多上传处理:5.php</h3>
        <form action="5.php" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="myfile[]"/><br/><br/>
            文件:<input type="file" name="myfile[]"/><br/><br/>
            文件:<input type="file" name="myfile[]"/><br/><br/>
            <input type="submit" value="上传"/>
        </form>
        <br/><br/>
        
        <h3>6. HTML5多上传处理:5.php</h3>
        <form action="5.php" method="post" enctype="multipart/form-data">
            文件:<input type="file" multiple name="myfile[]"/><br/><br/>
            <input type="submit" value="上传"/>
        </form>
        <br/><br/>
        
        
    </body>
</html>
form.html
<?php
//简单的文件上传处理

echo "<pre>";
print_r($_FILES);
//sleep(3);

//复制上传的文件
//copy($_FILES['myfile']['tmp_name'],"./uploads/".$_FILES['myfile']['name']);

move_uploaded_file($_FILES['myfile']['tmp_name'],"./uploads/".$_FILES['myfile']['name']);
1.php
<?php
//完整的文件上传处理

//1.初始化变量信息
$upfile = $_FILES['myfile']; //被上传的文件信息
$path = "./uploads/"; //上传文件存储目录
$typelist = array("image/jpeg","image/png","image/gif","image/pjpeg"); //允许的上传文件类型
$maxsize =0; //允许上传文件大小 (默认0表示不限制)

//2.判断上传错误号
if($upfile['error']>0){
    switch($upfile['error']){
        case 1: $info = "上传文件超出php.ini配置大小"; break;
        case 2: $info = "上传大小超过表单MAX_FILE_SIZE"; break;
        case 3: $info = "文件只有部分被上传"; break;
        case 4: $info = "没有文件被上传"; break;
        case 6: $info = "找不到临时文件夹"; break;
        case 7: $info = "文件写入失败"; break;
        default: $info="未知错误!"; break;
    }
    die("上传失败!原因:".$info);
}

//3.过滤上传文件类型
if(count($typelist)>0){
    if(!in_array($upfile['type'],$typelist)){
        die("上传失败!原因:文件类型错误!");
    }
}

//4. 过滤上传文件大小
if($maxsize>0 && $upfile['size']>$maxsize){
    die("上传失败!原因:文件大小超出限制!");
}

//5.随机上传文件名
$ext  =pathinfo($upfile['name'],PATHINFO_EXTENSION); //获取上传文件的扩展名
do{
    //随机新的上传文件名
    $filename = date("YmdHis").rand(1000,9999).".".$ext;
}while(file_exists($path.$filename)); //判断是否存在

//6.移动上传文件
//先判断是否是上传文件
if(is_uploaded_file($upfile['tmp_name'])){
    //移动上传文件
    if(move_uploaded_file($upfile['tmp_name'],$path.$filename)){
        echo "上传文件成功!文件名:".$filename;
    }else{
        die("上传文件移动失败!");
    }
}else{
    die("不是一个有效的上传文件!");
}
2.php
<?php
header("Content-Type:text/html;charset=utf-8");
// 使用函数实现文件上传

//1. 导入函数库文件
require("functions.php");

//2. 初始化变量
$typelist = array("image/jpeg","image/png","image/gif","image/pjpeg");
$path = "./uploads/";

//3. 执行上传
$res = fileUpload($_FILES['myfile'],$path,$typelist);

//4. 判断输出结果
if($res['error']){
    echo "上传文件成功!文件名:".$res['info'];
}else{
    echo "上传文件失败!原因:".$res['info'];
}
3.php
<?php
header("Content-Type:text/html;charset=utf-8");
//使用函数实现多文件上传处理

echo "<pre>";
print_r($_FILES);

echo "<hr/>";

//1. 导入函数库文件
require("functions.php");

//2. 初始化变量
$typelist = array("image/jpeg","image/png","image/gif","image/pjpeg");
$path = "./uploads/";

foreach($_FILES as $v){
    //3. 执行上传
    $res = fileUpload($v,$path,$typelist);

    //4. 判断输出结果
    if($res['error']){
        echo "上传文件成功!文件名:".$res['info']."<br/>";
    }else{
        echo "上传文件失败!原因:".$res['info']."<br/>";
    }
}
4.php
<?php
header("Content-Type:text/html;charset=utf-8");
//使用函数实现多文件上传处理

echo "<pre>";
print_r($_FILES);

//进行数据格式转换
$list = array();
foreach($_FILES['myfile']['name'] as $k=>$v){
    $list[$k]['name'] = $v;
    $list[$k]['type']  = $_FILES['myfile']['type'][$k];
    $list[$k]['tmp_name'] = $_FILES['myfile']['tmp_name'][$k];
    $list[$k]['error'] = $_FILES['myfile']['error'][$k];
    $list[$k]['size']  = $_FILES['myfile']['size'][$k];
}
print_r($list);

echo "<hr/>";

//1. 导入函数库文件
require("functions.php");

//2. 初始化变量
$typelist = array("image/jpeg","image/png","image/gif","image/pjpeg");
$path = "./uploads/";

foreach($list as $v){
    //3. 执行上传
    $res = fileUpload($v,$path,$typelist);

    //4. 判断输出结果
    if($res['error']){
        echo "上传文件成功!文件名:".$res['info']."<br/>";
    }else{
        echo "上传文件失败!原因:".$res['info']."<br/>";
    }
}
5.php

前端页面

简单的上传处理

使用函数实现多上传处理

 

posted @ 2019-10-09 14:27  沐风先生  阅读(141)  评论(0编辑  收藏  举报