PHP实现文件上传

来源:互联网 发布:怎么看电脑的端口号 编辑:程序博客网 时间:2024/05/07 13:25

工具类如下:

<?php class UploadHelper {//上传文件数组的名称private $fileName;//允许上传的最大值private $maxSize;//允许的上传类型private $allowMime;//文件扩展名private $allowExt;//上传文件到服务器的路径private $uploadPath;//是否只允许上传图片private $imgFlag;//上传文件信息private $fileInfo;//上传错误码,1为正确private $code = 1;//上传错误信息private $error = 'success';//文件扩展名private $ext;//上传文件的地址:路径+文件名private $destination;/*** 构造函数,这里面的参数都是默认的,在实际使用中,其实只需要指定一下* uploadPath上传路径和imgFlag是否限制只允许上传图片即可* @param $uploadPath 上传到服务器的路径* @param $imgFlag 是否限制只允许上传图片* @param $maxSize 允许上传的最大值* @param $allowExt 允许上传文件的后缀名* @param $allowMime 允许上传文件的类型*/public function __construct($uploadPath='./uploads', $imgFlag = true,$maxSize=5242880, $allowExt=''/*array('jpeg', 'jpg', 'png', 'gif')*/, $allowMime=''/*array('image/jpeg', 'image/png', 'image/gif')*/) {$this->maxSize = $maxSize;$this->allowMime = $allowMime;$this->allowExt = $allowExt;$this->uploadPath = $uploadPath;$this->imgFlag = $imgFlag;$this->init();}private function init() {$this->fileInfo = array();foreach ($_FILES as $k => $v) {$this->fileInfo = $v;}if (!empty($this->fileInfo)) {$this->ext = strtolower(pathinfo($this->fileInfo['name'], PATHINFO_EXTENSION));}}/*** 上传文件* @return 如果上传失败那么就返回false,如果上传成功,那么返回路径*/public function uploadFile() {if (!$this->checkError() || !$this->checkSize() || !$this->checkHTTPPost() || !$this->checkTrueImg()) {return false;}if (!empty($this->allowExt) && !$this->checkExt()) {return false;}if (!empty($this->allowMime) && !$this->checkMime()) {return false;}$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 false;}return $this->destination;}/*** 获取错误信息*/public function getError() {return $this->error;}/*** 检测上传文件是否出错* @return boolean*/private function checkError() {if (empty($this->fileInfo)) {$this->error = '文件上传出错';$this->code = 1001;return false;}if ($this->fileInfo['error'] == 0) {return true;}switch ($this->fileInfo['error']) {case 1:$this->error = '超过了PHP配置文件中upload_max_filesize选项的值';$this->code = 1002;break;case 2:$this->error = '超过了表单中MAX_FILE_SIZE设置的值';$this->code = 1003;break;case 3:$this->error = '文件部分被上传';$this->code = 1004;break;case 4:$this->error = '没有选择上传文件';$this->code = 1005;break;case 6:$this->error = '没有找到临时目录';$this->code = 1006;break;case 7:$this->error = '文件不可写';$this->code = 1007;break;case 8:$this->error = '由于PHP的扩展程序中断文件上传';$this->code = 1008;break;}return false;}/*** 检测上传文件的大小* @return boolean*/private function checkSize() {if ($this->fileInfo['size'] > $this->maxSize) {$this->error = '上传文件过大';$this->code = 1009;return false;}return true;}/*** 检测扩展名* @return boolean*/private function checkExt() {if (!in_array($this->ext, $this->allowExt)) {$this->error = '不允许的扩展名';$this->code = 1010;return false;}return true;}/*** 检测文件类型* @return boolean*/private function allowMime() {if (!in_array($this->fileInfo['type'], $this->allowMime)) {$this->error = '不允许的文件类型';$this->code = 1011;return false;}return true;}/*** 检测是否是真实图片* @return boolean*/private function checkTrueImg() {if ($this->imgFlag) {if (!@getimagesize($this->fileInfo['tmp_name'])) {$this->error = '不是真实图片';$this->code = 1012;return false;}return true;}return true;}/*** 检测是否通过HTTP POST方式上传的* @return boolean*/private function checkHTTPPost() {if (!is_uploaded_file($this->fileInfo['tmp_name'])) {$this->error = '文件不是通过HTTP POST方式上传的';$this->code = 1013;return false;}return true;}/*** 检测目录不存在,则创建*/private function checkUploadPath() {if (!file_exists($this->uploadPath)) {mkdir($this->uploadPath, 0777, true);}}/*** 产生唯一字符串* @return string*/private function getUniName() {return md5(uniqid(microtime(true), true));}} ?>

使用方法如下:

<!doctype html><html lang="en"><head><meta charset="UTF-8"><title>文件上传</title></head><body><form action="uploadHelperTest.php" method="post" enctype="multipart/form-data">上传:<input type="file" name="myFile" /><br/><input type="submit" value="上传"></form></body></html>

<?php header('content-type:text/html; charset=utf-8');require_once 'UploadHelper.class.php';$uploadHelper = new UploadHelper('./test', false);$destination = $uploadHelper->uploadFile();if (!($destination === false)) {echo "$destination";}echo $uploadHelper->getError(); ?>


0 0
原创粉丝点击