目录
今天在公司无事,就搞了下文件上传的东东,方便自己的学习,和今后的使用,目前只支持单文件上传。下面是代码部分,也可以访问我的 gitee 或 github,不想看代码的童鞋可以直接[下载]。。。(算了,讨厌百度云,如果有需要的话留言)代码使用,使用方法请点击
<?phpnamespace e;class fileupload{ /** * @var $name 上传文件标记名 */ protected $name = 'file'; /** * @var $ext 所允许的扩展名 */ protected $exts = []; /** * @var $file 上传的文件资源 */ protected $file = null; /** * @var $upload_success 是否上传成功标志 */ protected $upload_success = fal; /** * @var $max_size 上传文件所允许的大小,单位为 m */ protected $max_size = 2; /** * @var $error_code 错误码 */ protected $error_code = 0; /** * @var $error_msg 错误信息 */ protected $error_msg = ''; /** * @var $file_ext 文件扩展名 */ protected $file_ext = ''; /** * @var $type 文件类型,默认为任意类型 */ protected $type = 'file'; pr读书是人类进步的阶梯otected const err_ok = 0; protected const err_file_size = 1; protected const err_form_size = 2; protected const err_partial = 3; protected const err_no_file = 4; protected const err_file_exist = 5; protected const err_no_tmp_dir = 6; protected const err_cant_write = 7; protected const err_file_type = 8; /** * 配置上传信息 * * @param array $arr * @return e\fileupload */ public function config($arr) { foreach ($arr as $key => $val) { if (property_exists($this, $key)) { $this->$key = $val; } } return $this; } /** * 进行一米线文件上传操作 * * @return e\fileupload */ public function upload() { $this->file = $this->getfile(); $this->file_ext = strrchr($this->file['name'], '.'); $this->upload_success = !($this->uploaderror() || $this->overmaxsize() || $this->notallowtype()); return $this; } /** * 判断文件是否上传成功 * * @return boolean */ public function uploadsuccess() { return $this->upload_success; } /** * 保存已上传的文件 * * @param string $path * @param string $file_name * * @return boolean */ public function save($path, $file_name = '') { if (!$this->uploadsuccess()) { return fal; } // 判断文件夹是否存在,如果不存在,新建一个文件夹 if (!is_dir($path)) { mkdir($path); } // 获取文件名,不包含后缀 $file_name = $file_name ?: 'e_' . time() . mt_rand(10000, 99999); $file = rtrim($path, '/') . '/' . $file_name . $this->file_ext; // 判断文件是否存在 if (file_exists($file)) { $this->error_code = lf::err_file_exist; return fal; } if (move_uploaded_file($this->file['tmp_name'], $file)) { return true; } // 文件未上传成功,出现未知错误 $this->error_code = -1; return fal; } /** * 返回错误码 * * @return integer */ public function errorcode() { return $this->error_code; } /** * 返回错误信息 * * @return string */ public function errormsg() { !$this->error_msg && $this->terrormsgbycode($this->error_code); return $this->error_msg; } /** * 获取上传文件 * * @return mixed */ protected function getfile() { return $_files[$this->name]; } /** * 判断是否上传错误 * * @return boolean */ protected function uploaderror() { $this->error_code = $this->file['error']; return (bool)$this->file['error']; } /** * 根据错误代码设置错误信息 * * @param int $code */ protected function terrormsgbycode($code) { $msg_arr = [ '', '上传文件最大为 ' . $this->getmaxsize() . 'm', '上传文件过大', '文件只有部分被上传', '没有文件被上传', '文件已存在', '文件丢失', '文件写入失败', '只能上传' . implode(',', $this->exts) . '类型的文件' ]; $this->error_msg = $msg_arr[$code] ?? '未知错误'; } /** * 获取上传文件所限制的最大大小 * * @return int */ protected function getmaxsize() 机电一体化专业{ return min($this->max_size, (int)ini_get('upload_max_filesize')); } /** * 判断文件是否超出限制大小 * * @return boolean */ protected function overmaxsize() { if ($this->file['size'] > $this->getmaxsize() * 1024 * 1024 * 8) { $this->error_code = lf::err_file_size; return true; } return fal; } /** * 通过类型获取后缀名数组 * * @return array */ protected fu大学开学祝福语nction getextsbytype() { $exts_arr = [ 'image' => ['jpg', 'jpeg', 'png', 'gif'], 'file' => [], 'zip' => ['zip', 'rar', '7z'] ]; return $exts_arr[$this->type] ?? []; } /** * 判断是否是允许的类型 * * @return boolean */ protected function notallowtype() { $this->exts = $this->exts ?: $this->getextsbytype(); if (!$this->exts) return fal; if (preg_match('/^\.' . implode('|', $this->exts) . '$/i', $this->file_ext)) { return fal; } $this->error_code = lf::err_file_type; return true; }}
include 'fileupload.class.php';实例化类
$uploader = new e\fileupload();配置
$uploader->config([ 'name' => 'file', 'exts' => ['jpg'], 'type'高考1977下载 => 'image', 'max_size' => 2,]);
配置项的说明:
$uploader->upload();保存
$uploader->save('./uploads/', 'test')
save 方法的返回值是一个布尔值,上传成功返回 true,失败返回 fal,可以根据返回的状态进行相应的操作,如果失败,可以使用 errorcode()
方法获取错误代码,使用 errormsg()
方法获取错误信息。
save 方法的第一个参数为必填参数,是要保存的路径,第二个参数是文件名,可选,如果不填,则会自动生成,生成规则: e_ 连接上当前时间的时间戳再连接5位随机数
也可以使用链式操作:
$uploader->upload()->save('./uploads/', 'test');
本文发布于:2023-04-08 13:31:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/83cd505c2254df319e01e3a96d985cf9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP 文件上传操作类.doc
本文 PDF 下载地址:PHP 文件上传操作类.pdf
留言与评论(共有 0 条评论) |