Вход Регистрация
Файл: oc-includes/AjaxUploader.php
Строк: 184
<?php
// Theses classes were adapted from qqUploader
class AjaxUploader {
    private 
$_allowedExtensions;
    private 
$_sizeLimit;
    private 
$_file;

    function 
__construct(array $allowedExtensions null$sizeLimit null){
        if(
$allowedExtensions===null) { $allowedExtensions osc_allowed_extension(); }
        if(
$sizeLimit===null) { $sizeLimit 1024*osc_max_size_kb(); }
        
$this->_allowedExtensions $allowedExtensions;
        
$this->_sizeLimit $sizeLimit;

        if(!
Params::existServerParam('CONTENT_TYPE')) {
            
$this->_file false;
        } else if (
strpos(strtolower(Params::getServerParam('CONTENT_TYPE')), 'multipart/') === 0) {
            
$this->_file = new AjaxUploadedFileForm();
        } else {
            
$this->_file = new AjaxUploadedFileXhr();
        }
    }

    public function 
getOriginalName(){ return $this->_file->getOriginalName(); }

    function 
handleUpload($uploadFilename$replace false){
        if(!
is_writable(dirname($uploadFilename))){ return array('error' => __("Server error. Upload directory isn't writable.")); }
        if(!
$this->_file){ return array('error' => __('No files were uploaded.')); }
        
$size $this->_file->getSize();
        if(
$size == 0) { return array('error' => __('File is empty')); }
        if(
$size $this->_sizeLimit) { return array('error' => __('File is too large')); }

        
$pathinfo pathinfo($this->_file->getOriginalName());
        
$ext = @$pathinfo['extension'];
        
$uuid pathinfo($uploadFilename);

        if((
$this->_allowedExtensions && stripos($this->_allowedExtensionsstrtolower($ext))===false) ) {
            @
unlink($uploadFilename); // Wrong extension, remove it for security reasons
            
return array('error' => sprintf(__('File has an invalid extension, it should be one of %s.'), $this->_allowedExtensions));
        }

        if(!
$replace){
            if(
file_exists($uploadFilename)) {
                return array(
'error' => 'Could not save uploaded file. File already exists');
            }
        }

        if(
$this->_file->save($uploadFilename)){
            
$result $this->checkAllowedExt($uploadFilename);
            if(!
$result) {
                @
unlink($uploadFilename); // Wrong extension, remove it for security reasons
                
return array('error' => sprintf(__('File has an invalid extension, it should be one of %s.'), $this->_allowedExtensions));
            }
            
$files Session::newInstance()->_get('ajax_files');
            
$files[Params::getParam('qquuid')] = $uuid['basename'];
            
Session::newInstance()->_set('ajax_files'$files);
            return array(
'success' => true);
        } else {
            return array(
'error' => 'Could not save uploaded file. The upload was cancelled, or server error encountered');
        }
    }

    function 
checkAllowedExt($file) {
        require 
LIB_PATH 'osclass/mimes.php';
        if(
$file!='') {
            
$aMimesAllowed = array();
            
$aExt explode(','osc_allowed_extension());
            foreach(
$aExt as $ext){
                if(isset(
$mimes[$ext])) {
                    
$mime $mimes[$ext];
                    if( 
is_array($mime) ){
                        foreach(
$mime as $aux){
                            if( !
in_array($aux$aMimesAllowed) ) {
                                
array_push($aMimesAllowed$aux );
                            }
                        }
                    } else {
                        if( !
in_array($mime$aMimesAllowed) ) {
                            
array_push($aMimesAllowed$mime );
                        }
                    }
                }
            }
            
$bool_img false;
            
$fileMime '';
            if(
function_exists('finfo_file') && function_exists('finfo_open')) {
                
$finfo finfo_open(FILEINFO_MIME_TYPE);
                
$fileMime finfo_file($finfo$file);
            } else if(
function_exists('mime_content_type')) {
                
$fileMime mime_content_type($file);
            } else {
                
// *WARNING* There's no way check the mime type of the file, you should not blindly trust on your users' input!
                
$ftmp Params::getFiles('qqfile');
                
$fileMime = @$ftmp['type'];
            }

            if(
stripos($fileMime"image/")!==FALSE) {
                if(
function_exists("getimagesize")) {
                    
$info getimagesize($file);
                    if(isset(
$info['mime'])) {
                        
$fileMime $info['mime'];
                    } else {
                        
$fileMime '';
                    }
                };
            };

            if(
in_array($fileMime,$aMimesAllowed)) {
                return 
true;
            }
        }
        return 
false;
    }

}

class 
AjaxUploadedFileXhr {
    function 
__construct() {}

    public function 
save($path) {
        
$input fopen("php://input""r");
        
$temp tmpfile();
        
$realSize stream_copy_to_stream($input$temp);
        
fclose($input);
        if (
$realSize != $this->getSize()){ return false; }
        
$target fopen($path"w");
        
fseek($temp0SEEK_SET);
        
stream_copy_to_stream($temp$target);
        
fclose($target);
        return 
true;
    }

    public function 
getOriginalName() { return Params::getParam('qqfile'); }
    public function 
getSize() {
        if(
Params::existServerParam("CONTENT_LENGTH")){
            return (int)
Params::getServerParam("CONTENT_LENGTH");
        } else {
            throw new 
Exception(__('Getting content length is not supported.'));
        }
    }
}

class 
AjaxUploadedFileForm {
    private 
$_file;
    function 
__construct() { $this->_file Params::getFiles('qqfile'); }
    public function 
save($path) { return move_uploaded_file($this->_file['tmp_name'], $path); }
    public function 
getOriginalName() { return $this->_file['name']; }
    public function 
getSize() { return $this->_file['size']; }
}
?>
Онлайн: 2
Реклама