source: trunk/plugins/MootoolsFileManager/mootools-filemanager/Backend/Upload.php @ 1269

Last change on this file since 1269 was 1269, checked in by gogo, 9 years ago

Patch for Mootools File Manager for deprecation of ereg in php.

File size: 3.5 KB
RevLine 
[1239]1<?php
2/**
3 * Styx::Upload - Handles file uploads
4 *
5 * @package Styx
6 * @subpackage Utility
7 *
8 * @license MIT-style License
9 * @author Christoph Pojer <christoph.pojer@gmail.com>
10 */
11
12class Upload {
13       
14        /**
15         * Moves the uploaded file to the specified location. It throws a UploadException
16         * if anything goes wrong except for if the upload does not exist. This can be checked with {@link Upload::exists()}
17         *
18         * @param string $file
19         * @param string $to
20         * @param array $options
21         * @return bool|string Path to moved file or false if the specified upload does not exist
22         */
23        public static function move($file, $to, $options = null){
24                if(!self::exists($file)) return false;
25               
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);
34               
35                $file = $_FILES[$file];
36               
37                if($options['size'] && $file['size']>$options['size'])
38                        throw new UploadException('size');
39               
40                $pathinfo = pathinfo($file['name']);
41                if($options['extension']) $pathinfo['extension'] = $options['extension'];
42                if(!$pathinfo['extension'])
43                        throw new UploadException('extension');
44               
45                if(count($options['mimes'])){
46                        $mime = self::mime($file['tmp_name'], array(
47                                'default' => $file['type'],
48                                'extension' => $pathinfo['extension'],
49                        ));
50                       
51                        if(!$mime || !in_array($mime, $options['mimes']))
52                                throw new UploadException('extension');
53                }
54               
55                $file['ext'] = strtolower($pathinfo['extension']);
56                $file['base'] = basename($pathinfo['basename'], '.'.$pathinfo['extension']);
57               
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'];
61               
62                if(!$options['overwrite'] && file_exists($to))
63                        throw new UploadException('exists');
64               
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')));
67               
68                chmod($to, $options['chmod']);
69               
70                return realpath($to);
71        }
72       
73        /**
74         * Returns whether the Upload exists or not
75         *
76         * @param string $file
77         * @return bool
78         */
79        public function exists($file){
80                return !(empty($_FILES[$file]['name']) || empty($_FILES[$file]['size']));
81        }
82       
83        /**
84         * Returns (if possible) the mimetype of the given file
85         *
86         * @param string $file
87         * @param array $options
88         */
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);
95               
96                $mime = null;
97                $ini = error_reporting(0);
[1269]98                if (function_exists('finfo_open') && $f = @finfo_open(FILEINFO_MIME, getenv('MAGIC'))){
[1239]99                        $mime = finfo_file($f, $file);
100                        finfo_close($f);
101                }
102                error_reporting($ini);
103               
104                if(!$mime && in_array($options['extension'], array('gif', 'jpg', 'jpeg', 'png'))){
105                        $image = getimagesize($file);
106                        if(!empty($image['mime']))
107                                $mime = $image['mime'];
108                }
109               
110                if(!$mime && $options['default']) $mime = $options['default'];
111               
112                if((!$mime || $mime=='application/octet-stream') && $options['extension']){
113                        static $mimes;
114                        if(!$mimes) $mimes = parse_ini_file(pathinfo(__FILE__, PATHINFO_DIRNAME).'/MimeTypes.ini');
115                       
116                        if(!empty($mimes[$options['extension']])) return $mimes[$options['extension']];
117                }
118               
119                return $mime;
120        }
121       
122}
123
[1269]124class UploadException extends Exception {}
Note: See TracBrowser for help on using the repository browser.