<?php
//文件上传类
class Upload{
//增加一个静态属性,用来保存当前错误信息
public static $error;
//给外部提供方法,能够上传文件到指定目录,然后重命名文件,并将最终的文件的名字返回
/*
* 单文件上传
* @param1 array $file,一个包含文件上传5个元素的数组(name,tmp_name,type,size,error)
* @param2 string $path,要上传的文件存储路径,默认为空,表示使用配置文件里的路径
* @param3 string $allow,允许上传的文件的类型字符串(MIME类型)
* @param4 int $maxsize
* @return 成功返回最新的文件名字,失败返回false
*/
public static function uploadSingle($file,$path,$allow,$maxsize){
//验证数组的有效性
if(!(is_array($file) && isset($file['error']) && count($file) == 5)){
//必须是一个数组同时数组中必须包含下标为error的元素
//将错误保存到静态属性中
self::$error = '不是一个有效的上传文件!';
return false;
}
//判断文件是否上传成功:error
switch($file['error']){
case 1:
//文件超过服务器允许的大小
self::$error = '文件超过服务器允许的大小!最大允许' . ini_get('upload_max_filesize') ; //获取配置文件中的数据值
return false; //break代表结束分支,return代表结束方法
case 2:
//超过浏览器设定的大小
self::$error = '文件超过浏览器允许的大小!';
return false;
case 3:
//文件上传中断
self::$error = '文件只上传了一部分!';
return false;
case 4:
//没有选中文件
self::$error = '没有选中要上传的文件!';
return false;
case 6:
case 7:
self::$error = '服务器错误!';
return false;
}
//文件已经上传到服务器(临时文件夹)
//判断文件是否为允许的类型
if(strpos($allow,$file['type']) === false){
//没有在允许的上传列表中匹配到
self::$error = '当前文件的类型不允许上传,允许的类型有:' . $allow;
return false;
}
//判断文件大小是否是当前允许的
if($file['size'] > $maxsize){
//文件超过当前允许最大范围
self::$error = '文件超出当前允许的最大值,当前最大允许:' . $maxsize . '字节';
return false;
}
//文件的移动:移动到指定位置
//获取新的文件名字
$new_name = self::getName($file['name']);
if(move_uploaded_file($file['tmp_name'],$path . '/' . $new_name)){
//文件上传成功
return $new_name;
}else{
//移动失败
self::$error = '文件移动到指定的文件夹失败!';
return false;
}
}
/*
* 生成随机文件名:yyyymmddhhiiss+随机6为字符串+后缀名
* @param1 string $name,文件的名字(带后缀)
* @return 新的文件名字
*/
private static function getName($name){
//构造文件名字
$new_name = date('YmdHis'); //时间部分
//随机字符串
$string = implode('',array_merge(range('a','z'),range('A','Z')));
for($i = 0;$i < 6;$i++){
$new_name .= $string[mt_rand(0,strlen($string) - 1)];
}
//获取文件后缀名
return $new_name . strrchr($name,'.');
}
}
自定义::::
<?php
//封装php中的单文件(图片)上传类
/*
//参数1:$file 文件数组 5个属性值 name,type,size,tmp,error
//参数2:文件保存的路径$path
//参数3:文件上传允许的类型 $allow数组 $allow=array('image/jpeg','image/jpg','image/png','image/gif')
//参数4: 允许文件上传的最大大小 $size
//返回值: return $imageName文件的名字
*/
header('content-type:text/html;charset=utf-8');
class Upload{
//定义一个属性,专门保存错误信息
public static $error;
//文件转移的方法
public function uploadFile($file,$allow,$size,$path){
//首先判断文件是否已上传到临时目录
if(!is_array($file)){
Upload::$error='不是一个有效的文件';
return false;
}
//判断文件是否上传到临时目录成功
switch($file['error']){
case 1:
Upload::$error='上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。';
return false;
case 2:
Upload::$error='上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。';
return false;
case 3:
Upload::$error='文件只有部分被上传';
return false;
case 4:
Upload::$error='没有文件被上传';
return false;
case 6:
Upload::$error='找不到临时文件夹';
return false;
case 7:
Upload::$error='文件写入失败';
return false;
}
//判断文件类型是否是图片
if(!in_array($file['type'],$allow)){
Upload::$error='不是要求的文件类型';
return false;
}
//判断文件的大小是否在允许的范围内
if($file['size']>$size){
Upload::$error='超出允许最大文件大小';
return false;
}
//文件转移
if(move_uploaded_file($file['tmp_name'],$path.'/'.$this->getName($file))){
return $file['name'];
}else{
return Upload::$error;
}
}
//创建目录的方法
private function mkPath($path){
if(!is_dir($path)){
return mkdir('images');
}
}
//文件重命名
private function getName($file){
return time().$file['name'];
}
}
使用方法
$myfile=$_FILES['myfile'];
//var_dump($myfile);exit;
$path='./images';
$size='2000000';
if($photo=$upload->uploadFile($myfile,$size,$path)){
//echo $photo;exit;
$data=$_POST;
$data['photo']=$photo;
//var_dump($data);exit;
$res=$db->db_insert('book',$data);
//echo $res;exit;
if($res){
echo 'ok';
header('refresh:2;url=list.php');
}else{
echo 'fail';
header('refresh:2;url=form.php');
}
}else{
echo '上传失败,错误信息是:'.Upload::$error;
}
enctype='multipart/form-data'