Mercurial > judyates
view e2gallerypro/e2upload/Backend/Upload.php @ 28:118cb614cf18 judyates tip
judy bio.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 29 Dec 2015 16:26:18 -0800 |
parents | 3f6b44aa6b35 |
children |
line wrap: on
line source
1 <?php2 /**3 * Styx::Upload - Handles file uploads4 *5 * @package Styx6 * @subpackage Utility7 *8 * @license MIT-style License9 * @author Christoph Pojer <christoph.pojer@gmail.com>10 */12 class Upload {14 /**15 * Moves the uploaded file to the specified location. It throws a UploadException16 * if anything goes wrong except for if the upload does not exist. This can be checked with {@link Upload::exists()}17 *18 * @param string $file19 * @param string $to20 * @param array $options21 * @return bool|string Path to moved file or false if the specified upload does not exist22 */23 public static function move($file, $to, $options = null){24 if(!self::exists($file)) return false;26 $options = array_merge(array(27 'name' => null,28 'extension' => null,29 'size' => null,30 'chmod' => 0777,31 'overwrite' => false,32 'mimes' => array(),33 ), $options);35 $file = $_FILES[$file];37 if($options['size'] && $file['size']>$options['size'])38 throw new UploadException('size');40 $pathinfo = pathinfo($file['name']);41 if($options['extension']) $pathinfo['extension'] = $options['extension'];42 if(!$pathinfo['extension'])43 throw new UploadException('extension');45 if(count($options['mimes'])){46 $mime = self::mime($file['tmp_name'], array(47 'default' => $file['type'],48 'extension' => $pathinfo['extension'],49 ));51 if(!$mime || !in_array($mime, $options['mimes']))52 throw new UploadException('extension');53 }55 $file['ext'] = strtolower($pathinfo['extension']);56 $file['base'] = basename($pathinfo['basename'], '.'.$pathinfo['extension']);58 $real = realpath($to);59 if(!$real) throw new UploadException('path');60 if(is_dir($real)) $to = $real.'/'.($options['name'] ? $options['name'] : $file['base']).'.'.$file['ext'];62 if(!$options['overwrite'] && file_exists($to))63 throw new UploadException('exists');65 if(!move_uploaded_file($file['tmp_name'], $to))66 throw new UploadException(strtolower($_FILES[$file]['error']<=2 ? 'size' : ($_FILES[$file]['error']==3 ? 'partial' : 'nofile')));68 chmod($to, $options['chmod']);70 return realpath($to);71 }73 /**74 * Returns whether the Upload exists or not75 *76 * @param string $file77 * @return bool78 */79 public function exists($file){80 return !(empty($_FILES[$file]['name']) || empty($_FILES[$file]['size']));81 }83 /**84 * Returns (if possible) the mimetype of the given file85 *86 * @param string $file87 * @param array $options88 */89 public function mime($file, $options = array()){90 $file = realpath($file);91 $options = array_merge(array(92 'default' => null,93 'extension' => strtolower(pathinfo($file, PATHINFO_EXTENSION)),94 ), $options);96 $mime = null;97 if(function_exists('finfo_open') && $f = finfo_open(FILEINFO_MIME, getenv('MAGIC'))){98 $mime = finfo_file($f, $file);99 finfo_close($f);100 }102 if(!$mime && in_array($options['extension'], array('gif', 'jpg', 'jpeg', 'png'))){103 $image = getimagesize($file);104 if(!empty($image['mime']))105 $mime = $image['mime'];106 }108 if(!$mime && $options['default']) $mime = $options['default'];110 if((!$mime || $mime=='application/octet-stream') && $options['extension']){111 static $mimes;112 if(!$mimes) $mimes = parse_ini_file(pathinfo(__FILE__, PATHINFO_DIRNAME).'/MimeTypes.ini');114 if(!empty($mimes[$options['extension']])) return $mimes[$options['extension']];115 }117 return $mime;118 }120 }122 class UploadException extends Exception {}