天天看点

文件上传文件上传

文件上传

目的:用户可以通过浏览器,将本地文件上传到服务器

以单文件上传为例

sinFun.php

<?php
    /**
    *文件上传函数
    *
    *@param  string  $name  文件上传文件域的name值
    *@param  string  $dir  文件上传的指定保存路径
    *@param  array  $allow  文件上传允许的文件类型
    *
    *return  string  $filename  文件名  失败时,返回false
    *
    */

    function uploads($name,$dir,$allow=array('image/jpeg','image/png'))
    {
        //1.  判断文件上传错误
        if($_FILES[$name]['error'] > 0) {
            //文件上传出错
            switch($_FILES[$name]['error']) {
                case 1:
                    echo '上传的文件大小超过配置文件中的upload_max_filesize值';
                    break;
                case 2:
                    echo '上传文件的大小超过表单提交的最大值';
                    break;
                case 3:
                    echo '文件只有部分上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
                default :
                    echo '其它错误';
                    break;
            }
            return false;
        }

        //2.  判断你上传文件的类型是否是你想要的类型
        if(!in_array($_FILES[$name]['type'],$allow)) {
            echo '文件类型不符合';
            return false;
        }

        //3.  获取上传文件后缀名
        $suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);

        //4.  起名字
        $filename = date('Ymd').uniqid().mt_rand(0,9999999).'.'.$suffix;

        //5.  判断保存的路径是否存在
        $save_path = rtrim($dir,'/');
        $save_path .= '/';
        $save_path .= date('Ymd');
        // var_dump($save_path);

        if(!file_exists($save_path)) {
            mkdir($save_path,777,true);
        }

        //拼接一个完整的保存路径
        $path = $save_path.'/'.$filename;
        // var_dump($path);die;
        //6  判断是否是HTTP  post方式上传
        if(!is_uploaded_file($_FILES[$name]['tmp_name'])) {
            echo '传输方式不对';
            return false;
        }

        //7  移动图片
        if(!move_uploaded_file($_FILES[$name]['tmp_name'], $path)) {
            echo '移动失败';
            return false;
        }

        //返回移动成功的文件名
        return $filename;

    }
 ?>           

upload.html

<!DOCTYPE html>
<html lang="zh" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>单文件上传</title>
    </head>
    <body>
        <form  action="upload.php" method="post" enctype="multipart/form-data">
            上传头像:<input type="file" name="profile" />
            <button>提交</button>
        </form>
        <!--
            注意:
                1. 表单提交的方式必须是 post
                2. form表单中必须添加enctype属性
                3. input 中要设置name属性
        -->
    </body>
</html>
           

upload.php

<?php
        include("./sinFun.php");
        $result = uploads('profile','./upload',array('image/jpeg','image/png'));
        var_dump($result);
 ?>