HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>文件上传</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data" action="../PHP_3/function_file_upload.php">
        <input type="file" name="image">
        <input type="submit" name="sub" value="提交">

    </form>

</body>
</html>


PHP代码

<?php
header("content-type:text/html;charset=utf-8");
/*
 * 实现文件上传
 * @param1 array $file 需要上传的文件信息 一维5元素数组(name\tmp_name...)
 * @param2 array $allow_type 允许上传的MIME类型
 * @param3 string $path 存储路径
 * @param4 string &$error 如果出现错误的原因
 * @param5 array $allow_format=array() 允许上传的文件格式
 * @param6 int $max_size=200000设置允许上传最大值
 */
    function upload_single($file,$allow_type,$path,&$error,$allow_format=array(),$max_size=200000){
        //判断文件是否有效
        if (! is_array($file) || !isset($file['error'])){
            $error='不是一个有效文件';
            return false;
        }
        //判断文件路径是否有效
        if (!is_dir($path)){
            $error='文件不存在';
            return false;
        }

        //判断文件上传的过程中是否存在过程:error
        //判断文件上传过程中是否出错

        switch ($file['error']){
            case 1:
            case 2:
                $error='文件超出文件允许大小';
                return false;
            case 3:
                $error='文件上传过程中存在问题,只上传了一部分';
                return false;
            case 4:
                $error='用户没有选中要上传的文件!';
                return false;
            case 6:
            case 7:
                $error='文件保存失败';
                return false;
        }

        //判断文件类型的处理:通过MIMR匹配即可
        if (!in_array($file['type'],$allow_type)){
            $error='当前文件类型不允许上传!';
            return false;
        }

        //判断文件后缀名是否允许
        //strchr()先查找从.开始到最后的字符串,然后ltrim()函数进行把点给替换掉。
        $ext=ltrim(strrchr($file['name'],'.'),'.');
        if (!empty($allow_format)&&!in_array($ext,$allow_format)){
            $error='当前文件不允许上传';
            return false;
        }


        //文件大小的处理
        if ($file['size']> $max_size){
            $error='当前上传文件超出最大文件限制大小'.$max_size.'zij';
            return false;
        }

        //移动到指定目录
        if (!is_uploaded_file($file['tmp_name'])){
            //不是上传文件
            $error='错误:不是上传文件!';
            return false;
        }
        if (move_uploaded_file($file['tmp_name'],$path.$file['name'])){
            return $file['name'];
        }else{
            $error="文件上传失败";
            return false;
        }
        //构造文件名字:类型_年月日+随机字符串
        $fullname = strstr($file['type'],'/',TRUE).date('YYYYmmdd');
        for ($i=0;$i<4;$i++){
            $fullname=chr(mt_rand(65,90));
        }
        //拼凑后缀
        $fullname .='.'.$ext;
        //移动到指定目录
        if (!is_uploaded_file($file['tmp_name'])){
            //不是上传文件
            $error='错误!不是上传文件';
            return false;
        }
        if(move_uploaded_file($file['file_name'],$path.'/'.$fullname)){
            return $fullname;
        }else{
            $error='文件上传失败';
            return false;
        }

}

$file=$_FILES['image'];
$path='../phthoshop';
$allow_type=array('image/jpg','image/jpeg','image/gif','image/pjpeg');
$allow_format=array('jpg','gif','jpeg');
$max_size=8000000;
if ($filename=upload_single($file,$allow_type,$path,$error,$allow_format,$max_size)){
    echo $filename;
}else{
    echo $error;
}


?>