笔记
函数的功能
上传文件
条件
进行判断a
1.文件类型?
2.文件存储到什么位置?
3.文件格式限制?后缀名
4.文件大小限制?
结果:实现文件上传
1.结构能够看到(记录文件路径和名字都要返回)
2.失败?返回false,显示错误原因
开始实现:
1.获取文件五元素,分别传入函数中
2.先判断文件是否有效(数组,error值为0)
3.判断保存路径是否有效(is_dir(路径))
4.判断文件上传的过程中是否有错误
(error,error中有许多返回值,使用switch来判断)
5.判断MIME类型中type(in_array(要查的东西,在哪里查))
6.文件格式,就是后缀名字
(strrchr(取末尾),例如(.php,.jpg)
使用ltrim('.PHP','.')取消左边的.
rtrim()取消右边的
再判断后缀名是否在文件上传的文件名里
不允许为空empty()
)
7.文件大小处理
大于最大文件大小
8.移动到指定目录
判断是否为临时上传文件然后在移动
(is_uploaded_file
move_uloaded_file
)
9.命名冲突处理:上传同名文件?中文??
构造一个文件名字
类型_年月日+随机数字+随机数
strstr(字符串,'要找的字符',true)
date('yyyymmdd')
随机字符串
mt_rand(1,2)
chr(一个二进制)转换为对应的字符
对应的html使用POST的上传
<html>
<head></head>
<body>
<form method="POST" enctype="multipart/form-data" action="03.php">
<input type="file" name="image"/><br/>
<input type="submit" name="sub" value="件上传"/>
</form>
</body>
</html>
//以下代码是用来逐步进行判断
Array (
[image] => Array (
[name] => 无标题.jpg
[type] => image/jpeg
[tmp_name] => C:\Temp\php5FFE.tmp
[error] => 0
[size] => 12435
)
)
下面是01.php,这是跟着视频做的还有一个03.php是一边想着一边做的
<?php
//单文件
header('Content_type:text/html;charset=utf-8');
function upload_single($file,$allow_type,$path,&$error,$allow_format=array(),$max_size=2000000){
//先判断文件是否有效
if(!is_array($file) || !isset($file['error']) ){
$error='不是一个有效的上传文件';
return false;
}
//文件存储的位置
if(!is_dir($path)){
echo "文件位置错误";
return false;
}
//文件上传过程中是否有错误
switch($file['error']){
case 1:
case 2:
$error='文件超出服务器大小';
return false;
case 3:
$error='文件上传过程中出现问题';
return false;
case 4:
$error='没有选中需要上传文件';
case 6:
case 7:
$error='文件保存失败';
return fales;
}
//判断MIME类型中type
if(!in_array($file['type'],$allow_type)){
$error='当前文件类型不允许上传';
return false;
}
//判断文件格式
$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.'字节';
}
//构造文件名:类型_年月日+随机字符.ext
//TRUE是前半部分,false是后半部分
$fullname=strstr($file['type'],'/',TRUE).date('YYYYmmdd');
//产生随机字符串
//chr()二进制转字符串
for($i=0;$i<4;$i++){
//随机数转成字符放到最后
$fullname .= chr(mt_rand(65,90));
}
//添加后缀
$fullname .= '.'.$ext;
//移动指定目录
if(is_uploaded_file($file['tmp_name'])){
if(move_uploaded_file($file['tmp_name'], 'upload/'.$file['name'])){
return '文件:'.$fullname.'上传成功';
}else{
$error='移动失败';
return false;
}
}else{
$error='不是上传文件!';
return false;
}
}
$file=$_FILES['image'];
$path='upload';
$allow_type=array('image/jpg','image/jpeg');
$allow_format=array('jpg','jpeg');
$max_size=8000000;
if($filename= upload_single($file,$allow_type,$path,$error,$allow_format,$max_size)){
echo $filename;
}else{
echo $error;
}
?>
03.php很多的注释
<?php
/*
判断是不是空文件,有效文件 $file
判断类型是不是我们允许上传的类型 $type
判断位置,文件存放的位置是不是存在 $path
判断error这个返回值是多少 &$error
判断后缀 $ext
判断文件大小 $max_size
*/
function uploadset($file,$type,$path,&$error,$ext=array(),$max_size=20000){
//查看文件是否为空或者上传有误
if(!isset($file['error']) || !is_array($file)){
$error='不是有效文件';
return false;
}
//判断文件路径
if(is_dir($path)){
$error='文件路径有误';
return false;
}
//判断返回值error
switch ($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;
}
//判断上传类型type
if(!in_array($file['type'],$type)){
$error='不是有效类型';
return false;
}
//判断后缀$ext
//$i_ext=strrchr($file['name'],'.');//结果是从.开始获取(.xxx)
//$i_ext=ltrim($i_ext,'.');//从左侧删除'.' 结果为xxx
$i_ext=ltrim(strrchr($file['name'], '.'),'.');
//开始判断,上传的后缀名是不是在允许的数组里面 并且 判断是不是空的
if(!in_array($i_ext,$ext) && !empty($i_ext)){
$error='后缀名不合法';
return false;
}
//判断大小
//使用实际的图片文件大小与允许的大小比较
if($file['size'] > $max_size){
$error='文件大小不合法';
return false;
}
//以上,完成了文件五大元素的判断
//通过的,都是没问题的可以进行文件移动
//可以进行文件名称的构造
//类型_年月日+随机字符.ext
//strstr(要截取的字符,从哪个字符开始,true是从第二个参数的前半段)
//获取了image/jpg中的前半段image
$newname=strstr($file['type'],'/',TRUE).date('YYYYmmdd');
//在后面添加随机字符
for($i=0;$i<4;$i++){//循环四次添加四个随机字符
$newname .= chr(mt_rand(65,90));//chr(二进制数字转换对应的字母)
//mt_rand(开始范围,结束范围)
}
//添加后缀
$newname .= '.'.$i_ext;
//文件移动
if(is_uploaded_file($file['tmp_name'])){
if(move_uploaded_file($file['tmp_name'],'upload/'.$file['name'])){
return '文件'.$newname.'移动成功';
}else{
$error= '移动失败';
return false;
}
}else{
$error= '上传失败!';
return false;
}
}
$file=$_FILES['image'];
$path='upload';
$allow_type=array('image/jpg','image/jpeg');
$allow_format=array('jpg','jpeg');
$max_size=8000000;
if($filename= uploadset($file,$type,$path,$error,$ext,$max_size)){
echo $filename;
}else{
echo $error;
}
?>