<?php$up = new upload();$newpath = $up->uploadfile('fm');if ($newpath === fal) { var_du英语六级报名费mp($up->errornumber); var_dump($up->errorinfo);} el { echo $newpath;}class upload{ //文件上传保存路径 protected $path = './upload/'; //允许文件上传的后缀 protected $allowsuffix = ['jpg', 'jpeg', 'gif', 'wbmp', 'png']; //允许文件上传的mime类型 protected $allowmime = ['image/jpeg', 'image/gif', 'image/wbmp', 'image/png']; //允许文件上传的文件最大大小 protected $maxsize = 2000000; //是否启用随机名 protected $israndname = true; //加上文件前缀 protected $prefix = 'up_'; //自定义的错误号码和错误信息 protected $errornumber; protected $errorinfo; //文件的信息 protected $oldname; //文件名 protected $suffix; //文件后缀 protected $size; //文件大小 protected $mime; //文件mime protected $tmpname; //文件临时路径 protected $newname; //文件新名字 public function __construct($arr = []) { foreach ($arr as $key => $value) { $this->toption($key, $value); } } public function __get($name) { if ($name == 'errornumber') { return $this->errornumber; } el if ($name == 'errorinfo') { return $this->geterrorinfo(); } } /** * 判断这个$key是不是我的成员属性,如果是,则设置 * * @param [type] $key * @param [type] $value * @return void */ protected function toption($key, $value) { //得到所有的成员属性 $keys = array_keys(get_class_vars(__class__)); if (in_array($key, $keys)) { $this->$key = $value; } } /** * 文件上传函数 * $key 就是你input框中的name属性值 * * @param [type] $key * @return void */ public function uploadfile($key) { //判断有没有设置路径 path if (empty($this->path)) { $this->toption('errornumber', -1); return fal; } //判断该路径是否存在,是否可写 if (!$this->check()) { $this->toption('errornumber', -2); return fal; } //判断$_files里面的error信息是否为0,如果为0,说明文件信息在服务器端可以直接获取,提取信息保存到成员属性中 $error = $_files[$key]['error']; if ($error) { $this->toption('errornumber', $error); return fal; } el { //提取文件相关信息并且保存到成员属性中 $this->getfileinfo($key); } //判断文件的大小、mime、后缀是否符合 if (!$this->checksize() || !$this->checkmime() || !$this->checksuffix()) { return fal; } //得到新的文件名字 $this->newname = $this->createnewname(); //判断是否是上传文件,并且移动上传文件 if (is_uploaded_file($this->tmpname)) { if (move_uploaded_file($this->tmpname, $this->path . $this->newname)) { return $this->path . $this->newname; } el { $this->toption('errornumber', -7); return fal; } } el { $this->toption('errornumber', -6); return fal; } } /** * 得到文件的新名字 * * @return void */ protected function createnewname() { //判断是否使用随机名 if ($this->israndname) { $name = $this->prefix . uniqid() . '.' . $this->suffix; } el { $name = $this->prefix . $this->oldname; } return $name; } /** * 判断该路径是否存在,是否可写 * * @return void */ protected function check() { //文件夹不存在或者不是目录。创建文件夹 if (!file_exists($this->path) || !is_dir($this->path)) { return mkdir($this->path, 0777, true); } //判断文件是否可写 if (!is_writeable($this->path)) { return chmod($this->path, 0777); } return true; } /** * 提取文件相关信息并且保存到成员属性中 * * @param [type] $key * @return void */ protected function getfileinfo($key) { // 得到文件名字 $this->oldname = $_files[$key]['name']; //得到文件的mime类型 $this->mime = $_files[$key]['type']; //得到文件临时路径 $this->tmpname = $_files[$key]['tmp_name']; //得到文件大小 $this->size = $_files[$key]['size']; //得到文件后缀 $this->suffix = pathinfo($this->oldname)['extension']; } /** 四川三本录取时间* 判断文件大小 * * @return void */ protected function checksize() { if ($this->size > $this->maxsize) { $this->toption('errornumber', -3); return fal; } return true; } /** * 判断文件的mime是否符合 * * @return void */ protected function checkmime() { if (!in_array($this->mime, $this->allowmime)) { $this->toption('errornumber', -4); 医疗保障制度 return fal; } return true; } /** * 判断文件的后缀是否符合 * * @return void */ protected function checksuffix() { if (!in_array($this->suffix, $this->allowsuffix)) { $this->toption('errornumber', -5); return fal; } return true; } /** * 返回错误信息 * * @return void */ protected function geterrorinfo() { switch ($this->errornumber) { ca -1: $str = '文件路径没有设置'; break; ca -2: $str = '文件路径不是目录或者没有权限'; break; ca -3: $str = '文件大小超过指定范围'; break; ca -4: $str = '文件mime类型不符合'; break; ca -5: 夸人的句子 $str = '文件后缀不符合'; break; ca -6: $str = '不是上传文件'; break; ca -7: $str = '文件上传失败'; break; ca 1: $str = '文件超出php.ini设置大小'; break; ca 2: $str = '文件超出html设置大小'; break; ca 3: $str = '文件部分上传'; 129手抄报内容 break; ca 4: $str = '没有文件上传'; break; ca 6: $str = '找不到临时文件'; break; ca 7: $str = '文件写入失败'; break; } return $str; }}
测试代码:
<!doctype html><html lang="en"><head> <meta chart="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>上传文件</title></head><body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fm"> <br /> <input type="submit" value="上传"> </form></body></html>
运行结果:
本文发布于:2023-04-06 18:53:24,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/52e0f0c63dffffad1d75e431fa6b1895.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP学习之文件上传类.doc
本文 PDF 下载地址:PHP学习之文件上传类.pdf
留言与评论(共有 0 条评论) |