文件上传类
class uploadFile
{
//最大值
private $max_size;
//前缀
private $perfix;
//上传路径
private $upload_path;
//新的文件
private $new;
//设置不可访问属性值
public function __set($name, $value)
{
$this->$name = $value;
}
//返回不可访问属性值
public function __get($name)
{
return $this->$name;
}
//上传函数
public function upload($file)
{
if($file['error'])
{
//1.限制文件大小
if($file['size']>$this->$max_size)
{
return '上传文件大小不能超过'.$this->max_size.'请压缩后重试';
}
//2.避免重名
$filename = uniqid($this->perfix,false); //第二个参数true会加上一串字符更唯一
//3.按日期存放
if(is_dir($this->upload_path))
{
//创建子目录
$n_dir = $this->upload_path.'/'.date('Ymd');
if(is_dir($n_dir))
{
}
else
{
mkdir($n_dir,0777,true);
}
}
else
{
mkdir($this->upload_path,0777,true);
$n_dir = $this->upload_path.'/'.date('Ymd');
}
//4.限制文件上传类型
$allow = ['image/png','image/jpg','image/jpeg','image/gif'];
if(!(in_array($file['type'],$allow)))
{
return '文件类型不符,请核对后上传';
}
//用文件信息猜测文件类型 finfo 对象
$fileInfo = new finfo(FILEINFO_MIME_TYPE);
//用临时文件判断
$type = $fileInfo->file($file['tmp_name']);
if(!(in_array($type,$allow)))
{
return'嘿嘿';
}
//5.将文件移入创建的文件夹
//取得文件类型 strrchr 取得最后一个指定符号后的字符 包括指定字符这里用来获取类型
$suffix = strrchr($file['name'],'.');
$new_file = $n_dir.'/'.$filename.$suffix;
if(move_uploaded_file($file['tmp_name'],$new_file))
{
$this->new = $new_file;
return '上传成功';
}
else
{
return '移入失败';
}
}
else
{
return '上传失败!';
}
}
}
调用时需用$_FILES['name']获取上传文件。即$file = $_FILES['name']
文件下载
通过get方式获得文件名,明确文件所在根目录,读出文件。
告诉浏览器输出的是字节流,单位,文件名及内容长度
输出文件
$base = './img';
//注意编码 iconv
$file = iconv('utf-8','gbk',$file);
$full_file = $base.'/'.$file;
//文件大小
$fileSize = filesize($file);
//将内容慢慢读取
$handle = fopen($file,'r');
//存储字节流
$content = '';
//没到末尾
while(!feof($handle))
{
$content .= fread($handle,1024);
}
//告诉浏览器信息
//1.返回字节流
header("Content-Type:octet/stream");
//2.返回的单位是字节
header("Accept-Range:bytes");
//3.返回的内容长度
header("Content-Length:$fileSize");
//4.返回的文件名称
header("Content-Disposition:attchment;filename=$file");
//5.输出字节流
echo $content;