玛氪宕·梦魔(Markdown Memo),使用Markdown的云端备忘录,百度IFE的RIA启航班的不合格的作业,才……才没有什么阴谋呢!
源gitee链接https://gitee.com/arathi/MarkdownMemo?_from=gitee_search
				
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							346 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							346 lines
						
					
					
						
							12 KiB
						
					
					
				| <?php | |
| 
 | |
|    /** | |
|     * | |
|     * Editor.md PHP简易上传类(仅供演示用,生产环境使用还需谨慎考虑) | |
|     * | |
|     * @FileName: editormd.uploader.class.php | |
|     * @Auther: Pandao | |
|     * @E-mail: pandao@vip.qq.com | |
|     * @CreateTime: 2015-02-13 23:31:32 | |
|     * @UpdateTime: 2015-06-02 15:36:23 | |
|     * Copyright@2015 Editor.md all right reserved. | |
|     */ | |
| 
 | |
|     class EditorMdUploader | |
|     { | |
|         public $files;                          // $_FILES数组 | |
|         public $fileExit;                       // 文件扩展名 | |
|         public $saveName;                       // 最终保存的文件名 | |
|         public $saveURL;                        // 最终保存URL地址 | |
|         public $savePath;                       // 保存本地文件路径 | |
|         public $appendResult   = [];            // 追加到输出结果的数据 | |
|         public $randomLength   = '';            // 生成随机文件名的长度,当为日期时为日期的格式 | |
|         public $randomNameType = 1;             // 生成随机的形式, NULL为保留原文件名, 1生成随机字符串, 2生成日期文件名 | |
|         public $formats = array(                // 允许上传的文件格式 | |
|             'gif', 'jpg', 'jpeg', 'png', 'bmp' | |
|         ); | |
|         public $maxSize        = 1024;          // 最大上传文件大小,单位KB | |
|         public $cover          = true;          // 是否覆盖同名文件, 1覆盖,0不覆盖 | |
|         public $redirect       = false;         // 是否进行URL跳转 | |
|         public $redirectURL    = "";            // 上传成功或出错后要转到的URL         | |
|         public $errors = array(                 // 错误信息 | |
|             'empty'      => '上传文件不能为空', | |
|             'format'     =>'上传的文件格式不符合规定', | |
|             'maxsize'    => '上传的文件太大', | |
|             'unwritable' => '保存目录不可写,请更改权限', | |
|             'not_exist'  => '保存目录不存在', | |
|             'same_file'  => '已经有相同的文件存在' | |
|         ); | |
| 
 | |
|         /** | |
|          * 构造函数,初始化对象 | |
|          * | |
|          * @access  public | |
|          * @param   string          $savePath       最终保存的本地路径 | |
|          * @param   string          $saveURL        最终保存的URL地址 | |
|          * @param   string          $formats        允许上传的文件格式 | |
|          * @param   Number          $randomNameType 是否生成随机文件名及形式 | |
|          * @param   Intiger/string  $randomLength   生成随机文件名字符的长度 | |
|          * @param   boolean         $cover          是否覆盖相同文件 | |
|          * @param   Intiger         $maxSize        允许最大的上传文件大小,以KB为单位 | |
|          * @return  viod | |
|          */ | |
|          | |
|         public function __construct($savePath, $saveURL, $formats, $randomNameType = 1, $randomLength = '', $cover = true, $maxSize = 1024) | |
|         { | |
|             $this->savePath       = $savePath; | |
|             $this->saveURL        = $saveURL; | |
|             $this->formats        = $formats; | |
|             $this->maxSize        = $maxSize; | |
|             $this->cover          = $cover; | |
|             $this->randomNameType = $randomNameType; | |
|             $this->randomLength   = $randomLength; | |
|         } | |
| 
 | |
|         /** | |
|          * 配置参数函数 | |
|          * | |
|          * @access  public | |
|          * @param   array           $configs        配置项数组 | |
|          * @return  void | |
|          */ | |
|          | |
|         public function config($configs)  | |
|         { | |
|             foreach($configs as $key => $value) | |
|             { | |
|                 $this->$key = $value; | |
|             }        | |
|         } | |
| 
 | |
|         /** | |
|          * 执行文件上传 | |
|          * | |
|          * @access  public | |
|          * @param   string          $name           fileInput's name | |
|          * @return  boolean                         返回是否上传成功的布尔值 | |
|          */ | |
| 
 | |
|         public function upload($name) | |
|         {             | |
|             if(empty($_FILES[$name]['name'])) //上传文件为空时 | |
|             { | |
|                $this->message($this->errors['empty']); | |
|                  | |
|                 return false; | |
|             } | |
|              | |
|             $this->files = $_FILES[$name]; | |
|              | |
|             if(!file_exists($this->savePath)) //目录不存在 | |
|             { | |
|                 $this->message($this->errors['not_exist']); | |
|                  | |
|                 return false; | |
|             } | |
| 
 | |
|             if(!is_writable($this->savePath)) //目录不可写 | |
|             { | |
|                 $this->message($this->errors['unwritable']); | |
|                  | |
|                 return false; | |
|             } | |
| 
 | |
|             $this->fileExt  = $this->getFileExt($this->files["name"]); //取得扩展名 | |
|              | |
|             $this->setSeveName(); | |
|              | |
|             return $this->moveFile(); | |
|         } | |
| 
 | |
|         /** | |
|          * 检查并移动上传文件 | |
|          * | |
|          * @access  private | |
|          * @return  boolean | |
|          */ | |
| 
 | |
|         private function moveFile() | |
|         { | |
|             $files = $this->files; | |
|              | |
|             if ($this->formats != "" && !in_array($this->fileExt, $this->formats)) | |
|             { | |
|                 $formats = implode(',', $this->formats); | |
|                 $message = "您上传的文件" . $files["name"] . "是" . $this->fileExt . "格式的,系统不允许上传,您只能上传" . $formats . "格式的文件。"; | |
|                 $this->message($message); | |
|                  | |
|                 return false; | |
|             } | |
| 
 | |
|             if ($files["size"] / 1024 > $this->maxSize) | |
|             { | |
|                 $message = "您上传的 " . $files["name"] . ",文件大小超出了系统限定值" . $this->maxSize . " KB,不能上传。"; | |
|                 $this->message($message); | |
|                  | |
|                 return false; | |
|             } | |
| 
 | |
|             if (!$this->cover) //当不能覆盖时 | |
|             { | |
|                 if(file_exists($this->savePath.$this->saveName)) //有相同的文件存在 | |
|                 { | |
|                     $this->message($this->saveName . $this->errors['same_file']); | |
|                      | |
|                     return false; | |
|                 } | |
|             } | |
| 
 | |
|             if (!@move_uploaded_file($files["tmp_name"], iconv("utf-8", "gbk", $this->savePath . $this->saveName))) | |
|             {                 | |
|                 switch($files["errors"]) | |
|                 { | |
|                     case '0': | |
|                         $message = "文件上传成功"; | |
|                         break; | |
|                      | |
|                     case '1': | |
|                         $message = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"; | |
|                         break; | |
|                      | |
|                     case '2': | |
|                         $message = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"; | |
|                         break; | |
|                      | |
|                     case '3': | |
|                         $message = "文件只有部分被上传"; | |
|                         break; | |
|                      | |
|                     case '4': | |
|                         $message = "没有文件被上传"; | |
|                         break; | |
|                      | |
|                     case '6': | |
|                         $message = "找不到临时目录"; | |
|                         break; | |
|                      | |
|                     case '7': | |
|                         $message = "写文件到硬盘时出错"; | |
|                         break; | |
|                      | |
|                     case '8': | |
|                         $message = "某个扩展停止了文件的上传"; | |
|                         break; | |
|                      | |
|                     case '999': | |
|                     default: | |
|                         $message = "未知错误,请检查文件是否损坏、是否超大等原因。"; | |
|                         break; | |
|                 } | |
| 
 | |
|                 $this->message($message); | |
|                  | |
|                 return false; | |
|             } | |
|              | |
|             @unlink($files["tmp_name"]); //删除临时文件 | |
|              | |
|             return true; | |
|         } | |
| 
 | |
|         /** | |
|          * 生成随机文件名函数 | |
|          * | |
|          * @access  private | |
|          * @return  string         $fileName      返回生成的文件名字符串 | |
|          */ | |
| 
 | |
|         private function randomFileName() | |
|         { | |
|             if ($this->randomNameType == 1)        // 生成时间格式文件名 | |
|             { | |
|                 date_default_timezone_set('PRC');  //设置时区 | |
|                  | |
|                 $date     = date($this->randomLength); | |
|                 $fileName = $date . "_" . mt_rand(10000, 99999); | |
|             } | |
|             elseif ($this->randomNameType == 2)    // 生成随机字符文件名 | |
|             { | |
|                 $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; | |
|                 $max   = strlen($chars) - 1; | |
|                 mt_srand((double)microtime() * 1000000); | |
|                  | |
|                 for($i = 0; $i < $this->randomLength; $i++) | |
|                 { | |
|                     $fileName .= $chars[mt_rand(0, $max)]; | |
|                 } | |
|             } | |
|             else | |
|             { | |
|                 $fileName = ''; | |
|             } | |
| 
 | |
|             return $fileName; | |
|         } | |
| 
 | |
|         /** | |
|          * 组成最终保存的完整路径及文件名 | |
|          * | |
|          * @access  private | |
|          * @return  void | |
|          */ | |
|          | |
|          private function setSeveName() | |
|          {              | |
|             $this->saveName = $this->randomFileName(); | |
|               | |
|             if($this->saveName == '') //如果没生成随机文件名,就保留原文件名 | |
|             { | |
|                 $this->saveName = $this->files['name']; | |
|             } | |
|          } | |
| 
 | |
|         /** | |
|          * 取得保存的文件名,用于数据库存储 | |
|          * | |
|          * @access  public | |
|          * @return  string | |
|          */ | |
|          | |
|          public function getSeveName() | |
|          { | |
|              return $this->saveName; | |
|          } | |
| 
 | |
|         /** | |
|          * 获取文件后缀名函数 | |
|          * | |
|          * @access  public | |
|          * @return  string | |
|          */ | |
|          | |
|          public function getFileExt($fileName) | |
|          { | |
|              return trim(strtolower(substr(strrchr($fileName, '.'), 1))); | |
|          } | |
| 
 | |
|         /** | |
|          * 上传成功或出错后跳转 | |
|          * | |
|          * @access  public | |
|          * @param   array           $configs        配置项数组 | |
|          * @return  void | |
|          */ | |
|          | |
|         public function redirect()  | |
|         {             | |
|             header('location: ' . $this->redirectURL); | |
|         } | |
| 
 | |
|         /** | |
|          * 错误提示函数 | |
|          * | |
|          * @access  public | |
|          * @return  void | |
|          */ | |
| 
 | |
|         public function message($message, $success = 0) | |
|         { | |
|             $array = array( | |
|                 'success' => $success, | |
|                 'message' => $message | |
|             ); | |
| 
 | |
|             $array = array_merge($array, $this->appendResult); | |
|             $url   = $this->saveURL . $this->saveName; | |
| 
 | |
|             // 适用于跨域上传时,跳转到中介页面等 | |
|             if ($this->redirect)  | |
|             { | |
|                 foreach ($array as $key => $value) { | |
|                     if (is_array($value)) { | |
|                         $this->redirectURL .= '&' . $key . '=' . urlencode(json_encode($value)); | |
|                     } else { | |
|                         $this->redirectURL .= '&' . $key . '=' . $value; | |
|                     } | |
|                 } | |
|                  | |
|                 if ($success == 1) | |
|                 { | |
|                     $this->redirectURL .= '&url=' . $url; | |
|                 } | |
| 
 | |
|                 $this->redirect(); | |
|             } | |
|             else | |
|             { | |
|                 if ($success == 1) | |
|                 { | |
|                     $array['url']    = $url; | |
|                 } | |
|                  | |
|                 echo json_encode($array); | |
|             } | |
|         } | |
|     }
 |