75. 面向对象文件上传
2015-12-19 15:08
274 查看
upload.class.php <?php class upload { protected $fileName; protected $maxSize; protected $allowMime; protected $allowExt; protected $uploadPath; protected $imgFlag; protected $fileInfo; protected $error; protected $ext; protected $destination; protected $uniName; public function __construct($fileName='myfile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png'),$allowMime=array('image/jpeg','image/png','image/gif')) { $this->fileName = $fileName;//浏览框名字 $this->maxSize = $maxSize;//服务器端限制 $this->allowMime = $allowMime;//支持的类型 $this->allowExt = $allowExt;//允许的扩展名 $this->uploadPath = $uploadPath;//上传文件的路径 $this->imgFlag = $imgFlag;//是否检测为真实图片类型 $this->fileInfo = $_FILES[$this->fileName];//上传文件的信息保存到变量中 } protected function checkError() { if(!is_null($this->fileInfo)){ if($this->fileInfo['error']>0){ switch($this->fileInfo['error']) { case 1: $this->error = '超过了PHP配置文件中的upload_max_filesize中的值'; break; case 2: $this->error = '超过了表单中MAX_FILE_SIZE的值'; break; case 3: $this->error = '文件部分被上传'; break; case 4: $this->error = '没有文件被上传'; break; case 6: $this->error = '没有找到临时目录'; break; case 7: $this->error = '文件不可写'; break; case 8: $this->error = '由于PHP的扩展程序中断文件上传'; break; } return false; }else{ return true; } }else{ $this->error = '文件上传出错'; return false; } } protected function checkSize() { if($this->fileInfo['size']>$this->maxSize){ $this->error = '上传文件过大'; return false; } return true; } protected function checkExt() { $this->ext = strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION)); if(!in_array($this->ext,$this->allowExt)){ $this->error = '不允许的扩展名'; return false; } return true; } protected function checkMime() { if(!in_array($this->fileInfo['type'],$this->allowMime)) { $this->error='不允许的文件类型'; return false; } return true; } protected function checkTrueImg() { if($this->imgFlag){ if(!@getimagesize($this->fileInfo['tmp_name'])){ $this->error = '不是真实的图片'; return false; } return true; } } protected function showError() { exit('<span style="color:red">' . $this->error . '</span>'); } protected function checkHTTPPost() { if(!is_uploaded_file($this->fileInfo['tmp_name'])){ $this->error = '文件不是通过HTTP POST 方式上传上来的'; return false; } return true; } protected function checkUploadPath() { if(!file_exists($this->uploadPath)){ mkdir($this->uploadPath,0777,true); } } protected function getUniName() { return md5(uniqid(microtime(true),true)); } public function uploadFile() { if($this->checkError() && $this->checkExt() && $this->checkSize() && $this->checkMime() && $this->checkTrueImg() && $this->checkHTTPPost()){ $this->checkUploadPath(); $this->uniName = $this->getUniName() ; $this->destination = $this->uploadPath . '/' . $this->uniName . '.' . $this->ext; if(@move_uploaded_file($this->fileInfo['tmp_name'],$this->destination)){ return $this->destination; }else{ $this->error = '文件移动失败'; $this->showError(); } }else{ $this->showError(); } } }
upload.php <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <form action="doAction.php" method="post" enctype="multipart/form-data"> 选择上传的文件<input type="file" name="myfile"/><br/> 输入:<input type="text" name="mytext"/><br/> <input type="submit" value="提交"/> </form> </body> </html>
doAction.php <?php header('content-type:text/html;charset=utf-8'); require_once 'upload.class.php'; $upload = new upload(); $dest = $upload->uploadFile(); var_dump($dest);
相关文章推荐
- html table 隐藏行tr
- Bash算术计算
- Golang SQL Server 数据库 stmt使用
- 面向对象语言-反射机制
- 面试题29:二叉树中和为某一值的路径
- tomcat7 虚拟目录配置,根据域名直接打开项目主页
- hdu 4045(组合数学,第二类斯特林数)
- [从头学数学] 第08节 认识钟表
- java 与c#比较
- xcode用户界面概述
- Block中weakSelf的使用
- 初学web开发需要掌握哪些知识
- 测试人员的问题分析能力
- 图片预加载小记
- 破解 “PEDIY CrackMe 2007” 之 k4n
- 网红是完全从草根中产 的一群明星
- windbg kp kb 命令测试
- 【转】tomcat下部署 solr 5.3.1
- cell的各种使用和赋值 总结
- 体胖还需勤锻炼,人丑就要多读书