php文件操作(最后进行文件常用函数封装)

时间:2021-08-31 01:38:52

文件信息相关API

    $filename="./1-file.php";
//filetype($filename):获取文件的类型,返回的是文件的类型
echo '文件类型为:',filetype($filename),"\n";//file
//filesize($filename):获得文件的大小,返回字节
echo '文件大小为:',filesize($filename),"\n";//1214
//filectime($filename):获取文件的创建时间
echo '文件创建时间为:',filectime($filename),"\n";//
echo '文件创建时间为:',date('Y年m月d日 H:i:s',filectime($filename)),"\n";//2020年01月11日 13:15:29
//filemtime($filename):文件的修改时间
echo '文件的修改时间为:',date("Y/m/d H:i:s",filemtime($filename)),"\n";//2020/01/11 14:28:20
//fileatime($filename):文件的最后访问时间
echo '文件的最后访问时间为:',date("Y/m/d H:i:s",fileatime($filename)),"\n";//2020/01/11 14:28:20

检测文件是否可读、可写、可执行is_readable()、is_writeable()、is_executable();

    $filename="./1-file.php";
var_dump(
is_readable($filename),//bool(true)
is_writable($filename),//bool(true)
is_writeable($filename),//bool(true)
is_executable($filename)//bool(false)
);

is_file($filename):检测是否为文件,并且文件存在

    var_dump(is_file($filename));//bool(true)

pathinfo():文件路径相关信息

    $filename="./test1.txt";
$pathinfo=pathinfo($filename);
print_r($pathinfo);
/*
Array
(
[dirname] => .
[basename] => test1.txt
[extension] => txt
[filename] => test1
)
*/
echo '文件扩展名:',pathinfo($filename,PATHINFO_EXTENSION),"\n";//txt
$filename=__FILE__;
echo pathinfo($filename,PATHINFO_DIRNAME),"\n";//D:\phpstudy_pro\WWW\phptest
echo pathinfo($filename,PATHINFO_BASENAME),"\n";//2-path.php
echo pathinfo($filename,PATHINFO_EXTENSION),"\n";//php
echo pathinfo($filename,PATHINFO_FILENAME),"\n";//2-path
//basename():返回路径中的文件名部分
echo basename($filename),"\n";//2-path.php
echo basename($filename,'.php'),"\n";//2-path
//dirname():返回文件名中路径部分
echo dirname($filename),"\n";//D:\phpstudy_pro\WWW\phptest
//file_exists():检测文件或者目录是否存在
var_dump(file_exists($filename));//D:\phpstudy_pro\WWW\phptest\2-path.php:31:bool(true)
touch('aa.txt');

文件相关操作
文件创建、删除、剪切、重命名、拷贝

    //touch($filename):创建文件
$filename='test1.txt';
var_dump(touch($filename));//bool(true)
//unlink($filename):删除指定文件
var_dump(unlink($filename));//bool(true)
//检测文件存在则删除
if(file_exists($filename)){
if(unlink($filename)){
echo '文件删除成功';
}else{
echo '文件删除失败';
}
}else{
echo '要删除的文件不存在';//要删除的文件不存在
}
touch($filename);
//rename($filename,$newname):重命名或者剪切文件
$newname='test111.txt';
if(rename($filename,$newname)){
echo '重命名成功';//重命名成功
}else{
echo '重命名失败';
} //将test123.txt剪切到test目录下test123.txt
$filename='test123.txt';
$path='./test/test123.txt';
if(file_exists($filename)){
if(rename($filename,$path)){
echo '文件剪切成功';
}else{
echo '文件剪切失败';//文件剪切失败
}
}else{
echo '文件不存在';
} //copy($source,$dest):复制文件
$source='2-path.php';
$dest='test123/2-path.php';
if(copy($source,$dest)){
echo '文件拷贝成功';
}else{
echo '文件拷贝失败';//文件拷贝失败
}
//拷贝远程文件需要开启PHP配置文件中的allow_url_fopen=On
var_dump(copy('http://blog.phpfamily.org/wp-content/uploads/2016/09/king-1.jpg','./king-1.jpg'));//bool(false)

文件内容相关操作

    //fopen():打开指定文件,以指定的方式来打开
$handle=fopen($filename,'r');
var_dump($handle);//resource(5) of type (stream) //fread():读取文件内容 一个中文3个字节
$res=fread($handle,3);
echo $res,"\n";//这 $res=fread($handle,3);
echo $res,"\n";//是(接着上一次继续读取) //filesize() 函数返回指定文件的大小
echo filesize($filename),"\n";//
$res=fread($handle,filesize($filename));
echo $res,"\n";//(接着上一次继续读取)读取全部内容
//一段测试文本
//这是另一段测试文本hh //ftell返回文件指针读/写的位置
echo ftell($handle),"\n";// var_dump(fread($handle,21));//string(0) ""
//fseek($handle,$num):重置指针
fseek($handle,0);
var_dump(fread($handle,21));//string(21) "这是一段测试文" //fclose($handle):关闭文件句柄
fclose($handle);
var_dump(fread($handle,21));//bool(false)

文件写入

    $filename=__DIR__.'/aa.txt';
//rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在
$handle=fopen($filename,'rb+');
//fwrite()/fputs():写入内容
//注意:fwrite向文件写入内容,如果之前有内容,会产生覆盖
fwrite($handle,'abcdef',3);
fclose($handle);
//abc是一段测试文本
//这是另一段测试文本hh

文件追加

    //如果文件不存在会创建,
//如果文件存在,会先将文件内容截断为0,接着在开始写入
$filename="./aa.txt";
//ab+ 追加模式
$handle=fopen($filename,'ab+');
fwrite($handle,PHP_EOL.'hello king');
fclose($handle);
//abc是一段测试文本
//这是另一段测试文本hh
//hello king

截断文件

    $filename='aa.txt';
$handle=fopen($filename,'rb+');
//ftruncate():截断文件
ftruncate($handle,4);
fclose($handle);
//abcæ 第四个中文被截断后的奇葩效果哈哈哈哈

检测文件指针是否到了文件末尾

    $filename='aa.txt';
$handle=fopen($filename,'rb+');
//feof():检测文件指针是否到了文件末尾
while(!feof($handle)){
//一个字符一个字符读取
// echo fgetc($handle);
//一行一行读取
echo fgets($handle)."\n";
//一行一行读取,并且过滤HTML标记
echo strip_tags(fgets($handle))."\n";
//fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记
echo fgetss($handle);
}

fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段

    $filename='user.csv';
$handle=fopen($filename,'rb+');
$rows=[];
while($row=fgetcsv($handle)){
$rows[]=$row;
}
print_r($rows); $handle=fopen('user1.csv','rb+');
while($row=fgetcsv($handle,0,'-')){
print_r($row);
}

fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件

    $filename='user3.csv';
$handle=fopen($filename,'wb+'); $data=[
['id'=>1,'courseName'=>'ios','courseDesc'=>'this is ios'],
['id'=>2,'courseName'=>'android','courseDesc'=>'this is android'],
['id'=>3,'courseName'=>'swift','courseDesc'=>'this is swift']
];
foreach($data as $val){
fputcsv($handle,$val,'-');
}
fclose($handle);

获取到文件中的文本

    $filename="./aa.txt";
$string=file_get_contents($filename);
echo $string;
//abc是一段测试文本
//这是另一段测试文本hh
//hello king

向文件中写入内容
不存在则创建再写入

    $filename='./aa.txt';
//file_put_contents($filename,$data):向文件中写入内容
//$data是字符串格式
file_put_contents($filename,'this is a test');
$res=file_get_contents($filename);
print_r($res);//this is a test
echo "\n";
//如果不想覆盖之前的内容,可以先把文件中读取出来,接着再来写入
$string=file_get_contents($filename);
$data=$string.'this is a test';
file_put_contents($filename,$data);
$res=file_get_contents($filename);
print_r($res);//this is a testthis is a test //如果文件不存在,file_put_contents()会创建这个文件
$filename='aaa.txt';
$data=[
['a','b','c'],
['d','e','f']
];
file_put_contents($filename,$data); //数组或者对象序列化之后写入文件
$data=['a','b','c'];
$data=serialize($data);
file_put_contents($filename,$data);
$res=file_get_contents($filename);
print_r(unserialize($res));
//(
//[0] => a
//[1] => b
//[2] => c
//) // 将数组或者对象转换成json之后写入文件
$data=[
['a','b','c'],
['d','e','f']
];
$data=json_encode($data);
file_put_contents($filename,$data);
$res=json_decode(file_get_contents($filename));
print_r($res);
//
//Array
//(
// [0] => Array
// (
// [0] => a
// [1] => b
//[2] => c
// )
//
// [1] => Array
//(
// [0] => d
// [1] => e
//[2] => f
// )
//
//)

常用函数封装:

【文件常用操作函数封装】

    /**
* 创建文件操作
* @method create_file
* @param string $filename 文件名
* @return boolean true|false
*/
function create_file(string $filename){
//检测文件是否存在,不存在则创建
if(file_exists($filename)){
return false;
}
//检测目录是否存在,不存在则创建
if(!file_exists(dirname($filename))){
//创建目录,可以创建多级
mkdir(dirname($filename),0777,true);
}
if(file_put_contents($filename,'')!==false){
return true;
}
return false;
}
var_dump(create_file('2.txt'));//bool(true)
var_dump(create_file('a/4.txt'));//bool(true) /**
* 删除文件操作
* @method del_file
* @param string $filename 文件名
* @return boolean true|false
*/
function del_file(string $filename){
//检测删除的文件是否存在,并且是否有权限操作
if(!file_exists($filename)||!is_writable($filename)){
return false;
}
if(unlink($filename)){
return true;
}
return false;
}
var_dump(del_file('a/3.txt'));//bool(false) /**
* 拷贝文件操作
* @method copy_file
* @param string $filename 文件名
* @param string $dest 指定目录
* @return boolean true|false
*/
function copy_file(string $filename,string $dest){
//检测$dest是否是目标并且这个目录是否存在,不存在则创建
if(!is_dir($dest)){
mkdir($dest,0777,true);
}
$destName=$dest.DIRECTORY_SEPARATOR.basename($filename);
//检测目标路径下是否存在同名文件
if(file_exists($destName)){
return false;
}
//拷贝文件
if(copy($filename,$destName)){
return true;
}
return false;
}
var_dump(copy_file('2.txt','a'));//bool(true) /**
* 重命名操作
* @method rename_file
* @param string $oldName 原文件
* @param string $newName 新文件名
* @return boolean true|false
*/
function rename_file(string $oldName,string $newName){
//检测原文件并且存在
if(!is_file($oldName)){
return false;
}
//得到原文件所在的路径
$path=dirname($oldName);
$destName=$path.DIRECTORY_SEPARATOR.$newName;
if(is_file($destName)){
return false;
}
if(rename($oldName,$newName)){
return true;
}
return false;
}
// var_dump(rename_file('2.txt','333.txt')); /**
* 剪切文件操作
* @method cut_file
* @param string $filename 原文件
* @param string $dest 目标路径
* @return boolean true|false
*/
function cut_file(string $filename,string $dest){
if(!is_file($filename)){
return false;
}
if(!is_dir($dest)){
mkdir($dest,0777,true);
}
$destName=$dest.DIRECTORY_SEPARATOR.basename($filename);
if(is_file($destName)){
return false;
}
if(rename($filename,$destName)){
return true;
}
return false;
}
var_dump(cut_file('333.txt','a'));
var_dump(cut_file('22.txt','a'));

【文件信息相关函数封装】

    /**
* 返回文件信息
* @method get_file_info
* @param string $filename 文件名
* @return mixed 文件信息相关数组|false
*/
function get_file_info(string $filename){
if(!is_file($filename)||!is_readable($filename)){
return false;
}
return [
'atime'=>date("Y-m-d H:i:s",fileatime($filename)),
'mtime'=>date("Y-m-d H:i:s",filemtime($filename)),
'ctime'=>date("Y-m-d H:i:s",filectime($filename)),
'size'=>trans_byte(filesize($filename)),
'type'=>filetype($filename)
];
}
var_dump(get_file_info('22.txt')); /**
* 字节单位转换的函数
* @method trans_byte
* @param int $byte 字节
* @param integer $precision 默认精度,保留小数点后2位
* @return string 转换之后的字符串
*/
function trans_byte(int $byte,int $precision=2){
$kb=1024;
$mb=1024*$kb;
$gb=1024*$mb;
$tb=1024*$gb;
if($byte<$kb){
return $byte.'B';
}elseif($byte<$mb){
return round($byte/$kb,$precision).'KB';
}elseif($byte<$gb){
return round($byte/$mb,$precision).'MB';
}elseif($byte<$tb){
return round($byte/$gb,$precision).'GB';
}else{
return round($byte/$tb,$precision).'TB';
}
}
var_dump(trans_byte(12345678));//string(7) "11.77MB"

【文件读写函数封装】

    /**
* 读取文件内容,返回字符串
* @method read_file
* @param string $filename 文件名
* @return mixed 文件内容|false
*/
function read_file(string $filename){
//检测是否是一个文件并且文件已存在
if(is_file($filename) && is_readable($filename)){
return file_get_contents($filename);
}
return false;
}
var_dump(read_file('232.txt'));//bool(false) /**
* 读取文件中的内容到数组中
* @method read_file_array
* @param string $filename 文件名
* @param boolean $skip_empty_lines 是否过滤空行
* @return mixed array|false
*/
function read_file_array(string $filename,bool $skip_empty_lines=false){
if(is_file($filename)&&is_readable($filename)){
if($skip_empty_lines){
return file($filename,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
}else{
return file($filename);
}
}
return false;
}
var_dump(read_file_array('22.txt',true)); /**
* 向文件中写入内容
* @method write_file
* @param string $filename 文件名
* @param mixed $data 数据,数组和对象需要处理
* @return boolean true|false
*/
function write_file(string $filename,$data){
$dirname=dirname($filename);
//检测目标路径是否存在
if(!file_exists($dirname)){
mkdir($dirname,0777,true);
}
//判断内容是否是数组或者对象
if(is_array($data)||is_object($data)){
//序列化数据
$data=serialize($data);
}
//向文件中写入内容
if(file_put_contents($filename,$data)!==false){
return true;
}else{
return false;
}
}
var_dump(write_file('c/1.txt',['a','b','c'])); /**
* 向文件中写入内容,之前内容不清空
* @method write_file1
* @param string $filename 文件名
* @param mixed $data 数据
* @param boolean $clearFlag 是否清空文件
* @return boolean true|false
*/
function write_file1(string $filename,$data,bool $clearFlag=false){
$dirname=dirname($filename);
//检测目标路径是否存在
if(!file_exists($dirname)){
mkdir($dirname,0777,true);
}
//检测文件是否存在并且可读
if(is_file($filename)&&is_readable($filename)){
//读取文件内容,之后和新写入的内容拼装到一起
if(filesize($filename)>0){
$srcData=file_get_contents($filename);
}
} //判断内容是否是数组或者对象
if(is_array($data)||is_object($data)){
//序列化数据
$data=serialize($data);
}
//拼装到一起
$data=$srcData.$data;
//向文件中写入内容
if(file_put_contents($filename,$data)!==false){
return true;
}else{
return false;
}
}
var_dump(write_file1('22.txt','hello world')); /**
* 截断文件到指定大小
* @method truncate_file
* @param string $filename 文件名
* @param int $length 长度
* @return boolean true|false
*/
function truncate_file(string $filename,int $length){
//检测是否是文件
if(is_file($filename)&&is_writable($filename)){
$handle=fopen($filename,'r+');
$length=$length<0?0:$length;
ftruncate($handle,$length);
fclose($handle);
return true;
}
return false;
}
var_dump(truncate_file('22.txt',2));

【文件下载函数封装】

    /**
* 下载文件
* @method down_file
* @param string $filename 文件名
* @param array $allowDownExt 允许下载的文件类型
* @return void
*/
function down_file(string $filename,array $allowDownExt=array('jpeg','jpg','png','gif','txt','html','php','rar','zip')){
//检测下载文件是否存在,并且可读
if(!is_file($filename)||!is_readable($filename)){
return false;
}
//检测文件类型是否允许下载
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if(!in_array($ext,$allowDownExt)){
return false;
}
//通过header()发送头信息
//告诉浏览器输出的是字节流
header('Content-Type:application/octet-stream'); //告诉浏览器返回的文件大小是按照字节进行计算的
header('Accept-Ranges: bytes'); //告诉浏览器返回的文件大小
header('Accept-Length: '.filesize($filename)); //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
header('Content-Disposition: attachment;filename=king_'.basename($filename)); //读取文件中的内容
readfile($filename);
exit; } 规定每次读取文件的字节数为1024字节,直接输出数据
/**
* 下载文件
* @method down_file
* @param string $filename 文件名
* @param array $allowDownExt 允许下载的文件类型
* @return void
*/
function down_file1(string $filename,array $allowDownExt=array('jpeg','jpg','png','gif','txt','html','php','rar','zip')){
//检测下载文件是否存在,并且可读
if(!is_file($filename)||!is_readable($filename)){
return false;
}
//检测文件类型是否允许下载
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if(!in_array($ext,$allowDownExt)){
return false;
}
//通过header()发送头信息 //告诉浏览器输出的是字节流
header('Content-Type:application/octet-stream'); //告诉浏览器返回的文件大小是按照字节进行计算的
header('Accept-Ranges: bytes'); $filesize=filesize($filename);
//告诉浏览器返回的文件大小
header('Accept-Length: '.$filesize); //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
header('Content-Disposition: attachment;filename=king_'.basename($filename)); //读取文件中的内容 //规定每次读取文件的字节数为1024字节,直接输出数据
$read_buffer=1024;
$sum_buffer=0;
$handle=fopen($filename,'rb');
while(!feof($handle) && $sum_buffer<$filesize){
echo fread($handle,$read_buffer);
$sum_buffer+=$read_buffer;
}
fclose($handle);
exit;
} //在具体页面调用时
require_once 'file.func.php';
$filename=$_GET['filename'];
down_file1($filename);

【文件上传函数封装】

    /**
* 单文件上传
* @method upload_file
* @param array $fileInfo 上传文件的信息,是一个数组
* @param string $uploadPath 文件上传默认路径
* @param boolean $imageFlag 是否检测真实图片
* @param array $allowExt 允许上传的文件类型
* @return mixed 成功返回文件最终保存路径及名称,失败返回false
*/
function upload_file(array $fileInfo,string $uploadPath='./uploads',bool $imageFlag=true,array $allowExt=array('jpeg','jpg','png','gif'),int $maxSize=2097152){
define('UPLOAD_ERRS',[
'upload_max_filesize'=>'超过了PHP配置文件中upload_max_filesize选项的值',
'form_max_size'=>'超过了表单MAX_FILE_SIZE选项的值',
'upload_file_partial'=>'文件部分被上传',
'no_upload_file_select'=>'没有选择上传文件',
'upload_system_error'=>'系统错误',
'no_allow_ext'=>'非法文件类型',
'exceed_max_size'=>'超出允许上传的最大值',
'not_true_image'=>'文件不是真实图片',
'not_http_post'=>'文件不是通过HTTP POST方式上传上来的',
'move_error'=>'文件移动失败'
]); //检测是否上传是否有错误
if($fileInfo['error']===UPLOAD_ERR_OK){
//检测上传文件类型
$ext=strtolower(pathinfo($fileInfo['name'],PATHINFO_EXTENSION));
if(!in_array($ext,$allowExt)){
echo UPLOAD_ERRS['no_allow_ext'];
return false;
}
//检测上传文件大小是否符合规范
if($fileInfo['size']>$maxSize){
echo UPLOAD_ERRS['exceed_max_size'];
return false;
}
//检测是否是真实图片
if($imageFlag){
if(@!getimagesize($fileInfo['tmp_name'])){
echo UPLOAD_ERRS['not_true_image'];
return false;
}
}
//检测文件是否通过HTTP POST方式上传上来的
if(!is_uploaded_file($fileInfo['tmp_name'])){
return UPLOAD_ERRS['not_http_post'];
}
//检测目标目录是否存在,不存在则创建
if(!is_dir($uploadPath)){
mkdir($uploadPath,0777,true);
}
//生成唯一文件名,防止重名产生覆盖
$uniName=md5(uniqid(microtime(true),true)).'.'.$ext;
$dest=$uploadPath.DIRECTORY_SEPARATOR.$uniName; //移动文件
if(@!move_uploaded_file($fileInfo['tmp_name'],$dest)){
echo UPLOAD_ERRS['move_error'];
return false;
}
echo '文件上传成功';
return $dest;
}else{
switch($fileInfo['error']){
case 1:
// $mes='超过了PHP配置文件中upload_max_filesize选项的值';
$mes=UPLOAD_ERRS['upload_max_filesize'];
break;
case 2:
$mes=UPLOAD_ERRS['form_max_size'];
break;
case 3:
$mes=UPLAOD_ERRS['upload_file_partial'];
break;
case 4:
$mes=UPLOAD_ERRS['no_upload_file_select'];
break;
case 6:
case 7:
case 8:
$mes=UPLAOD_ERRS['upload_system_error'];
break;
}
echo $mes;
return false;
}
} //在具体页面调用时
require_once 'file.func.php';
$fileInfo=$_FILES['myFile'];
var_dump(upload_file($fileInfo));

【文件压缩与解压缩函数封装】

    /**
* 压缩单个文件
* @method zip_file
* @param string $filename 文件名
* @return boolean true|false
*/
function zip_file(string $filename){
if(!is_file($filename)){
return false;
}
$zip=new ZipArchive();
$zipName=basename($filename).'.zip';
//打开指定压缩包,不存在则创建,存在则覆盖
if($zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){
//将文件添加到压缩包中
if($zip->addFile($filename)){
$zip->close();
@unlink($filename);
return true;
}else{
return false;
}
}else{
return false;
}
}
// var_dump(zip_file('22.txt'));
// func_get_args
// test1.zip /**
* 多文件压缩
* @method zip_files
* @param string $zipName 压缩包的名称,.zip结尾
* @param string $files 需要压缩文件名,可以是多个
* @return boolean true|false
*/
function zip_files(string $zipName,...$files){
//检测压缩包名称是否正确
$zipExt=strtolower(pathinfo($zipName,PATHINFO_EXTENSION));
if('zip'!==$zipExt){
return false;
}
$zip=new ZipArchive();
if($zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){
foreach($files as $file){
if(is_file($file)){
$zip->addFile($file);
}
}
$zip->close();
return true;
}else{
return false;
}
}
// var_dump(zip_files('test1.zip','22.txt'));
// var_dump(zip_files('test2.zip','doUpload.php','downLoad.html','upload.html')); /**
* 解压缩
* @method unzip_file
* @param string $zipName 压缩包名称
* @param string $dest 解压到指定目录
* @return boolean true|false
*/
function unzip_file(string $zipName,string $dest){
//检测要解压压缩包是否存在
if(!is_file($zipName)){
return false;
}
//检测目标路径是否存在
if(!is_dir($dest)){
mkdir($dest,0777,true);
}
$zip=new ZipArchive();
if($zip->open($zipName)){
$zip->extractTo($dest);
$zip->close();
return true;
}else{
return false;
}
}
// var_dump(unzip_file('test2.zip','a'));

$_FILES 参数详解:
$_FILES["file"]["name"] – 被上传文件的名称
$_FILES["file"]["type"] – 被上传文件的类型
$_FILES["file"]["size"] – 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] – 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] – 由文件上传导致的错误代码


$_FILES["file"]["error"]中的["error"]值情况:
UPLOAD_ERR_OK
0:没有错误发生,文件上传成功
UPLOAD_ERR_INI_SIZE
1:上传的文件超过了 php.ini 中 upload_max_filesize(默认情况为 2M) 选项限制的值
UPLOAD_ERR_FORM_SIZE
2:上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
UPLOAD_ERR_PARTIAL
3:文件只有部分被上传
UPLOAD_ERR_NO_FILE
4:没有文件被上传
5:传文件大小为 0