Вход Регистрация
Файл: fckeditor/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php
Строк: 222
<?php
/**
 * CKFinder
 * ========
 * http://www.ckfinder.com
 * Copyright (C) 2007-2008 Frederico Caldeira Knabben (FredCK.com)
 *
 * The software, this file and its contents are subject to the CKFinder
 * License. Please read the license.txt file before using, installing, copying,
 * modifying or distribute this file or part of its contents. The contents of
 * this file is part of the Source Code of CKFinder.
 */

/**
 * @package CKFinder
 * @subpackage CommandHandlers
 * @copyright Frederico Caldeira Knabben
 */

/**
 * Handle FileUpload command
 * 
 * @package CKFinder
 * @subpackage CommandHandlers
 * @copyright Frederico Caldeira Knabben
 */
class CKFinder_Connector_CommandHandler_FileUpload extends CKFinder_Connector_CommandHandler_CommandHandlerBase
{
    
/**
     * Command name
     *
     * @access protected
     * @var string
     */
    
protected $command "FileUpload";

    
/**
     * send response (save uploaded file, resize if required)
     * @access public
     *
     */
    
public function sendResponse()
    {
        
$iErrorNumber CKFINDER_CONNECTOR_ERROR_NONE;

        
$oRegistry =& CKFinder_Connector_Core_Factory::getInstance("Core_Registry");
        
$oRegistry->set("FileUpload_fileName""unknown file");

        
$uploadedFile array_shift($_FILES);

        if (!isset(
$uploadedFile['name'])) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID);
        }

        
$sFileName CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(basename($uploadedFile['name']));
        
$oRegistry->set("FileUpload_fileName"$sFileName);

        
$this->checkConnector();
        
$this->checkRequest();

        
$_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config");
        if (!
$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_UPLOAD)) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED);
        }

        
$_resourceTypeConfig $this->_currentFolder->getResourceTypeConfig();
        if (!
CKFinder_Connector_Utils_FileSystem::checkFileName($sFileName) || $_resourceTypeConfig->checkIsHiddenFile($sFileName)) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME);
        }

        
$resourceTypeInfo $this->_currentFolder->getResourceTypeConfig();
        if (!
$resourceTypeInfo->checkExtension($sFileName)) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION);
        }

        
$sFileNameOrginal $sFileName;
        
$oRegistry->set("FileUpload_fileName"$sFileName);

        
$maxSize $resourceTypeInfo->getMaxSize();
        if (!
$_config->checkSizeAfterScaling() && $maxSize && $uploadedFile['size']>$maxSize) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG);
        }

        
$htmlExtensions $_config->getHtmlExtensions();
        
$sExtension CKFinder_Connector_Utils_FileSystem::getExtension($sFileNameOrginal);

        if (
$htmlExtensions
        
&& !CKFinder_Connector_Utils_Misc::inArrayCaseInsensitive($sExtension$htmlExtensions)
        && (
$detectHtml CKFinder_Connector_Utils_FileSystem::detectHtml($uploadedFile['tmp_name'])) === true ) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_WRONG_HTML_FILE);
        }

        
$sExtension CKFinder_Connector_Utils_FileSystem::getExtension($sFileNameOrginal);
        
$secureImageUploads $_config->getSecureImageUploads();
        if (
$secureImageUploads
        
&& ($isImageValid CKFinder_Connector_Utils_FileSystem::isImageValid($uploadedFile['tmp_name'], $sExtension)) === false ) {
            
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_CORRUPT);
        }

        switch (
$uploadedFile['error']) {
            case 
UPLOAD_ERR_OK:
                break;

            case 
UPLOAD_ERR_INI_SIZE:
            case 
UPLOAD_ERR_FORM_SIZE:
                
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG);
                break;

            case 
UPLOAD_ERR_PARTIAL:
            case 
UPLOAD_ERR_NO_FILE:
                
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_CORRUPT);
                break;

            case 
UPLOAD_ERR_NO_TMP_DIR:
                
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_NO_TMP_DIR);
                break;

            case 
UPLOAD_ERR_CANT_WRITE:
                
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED);
                break;

            case 
UPLOAD_ERR_EXTENSION:
                
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED);
                break;
        }

        
$sServerDir $this->_currentFolder->getServerPath();
        
$iCounter 0;

        while (
true)
        {
            
$sFilePath CKFinder_Connector_Utils_FileSystem::combinePaths($sServerDir$sFileName);

            if (
file_exists($sFilePath)) {
                
$iCounter++;
                
$sFileName =
                
CKFinder_Connector_Utils_FileSystem::getFileNameWithoutExtension($sFileNameOrginal) .
                
"(" $iCounter ")" "." .
                
CKFinder_Connector_Utils_FileSystem::getExtension($sFileNameOrginal);
                
$oRegistry->set("FileUpload_fileName"$sFileName);

                
$iErrorNumber CKFINDER_CONNECTOR_ERROR_UPLOADED_FILE_RENAMED;
            } else {
                if (
false === move_uploaded_file($uploadedFile['tmp_name'], $sFilePath)) {
                    
$iErrorNumber CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED;
                }
                else {
                    if (isset(
$detectHtml) && $detectHtml === -&& CKFinder_Connector_Utils_FileSystem::detectHtml($sFilePath) === true) {
                        @
unlink($sFilePath);
                        
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_WRONG_HTML_FILE);
                    }
                    else if (isset(
$isImageValid) && $isImageValid === -&& CKFinder_Connector_Utils_FileSystem::isImageValid($sFilePath$sExtension) === false) {
                        @
unlink($sFilePath);
                        
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_CORRUPT);
                    }
                }
                if (
is_file($sFilePath) && ($perms $_config->getChmodFiles())) {
                    
$oldumask umask(0);
                    
chmod($sFilePath$perms);
                    
umask($oldumask);
                }
                break;
            }
        }

        if (!
$_config->checkSizeAfterScaling()) {
            
$this->_errorHandler->throwError($iErrorNumber$sFileNamefalse);
        }

        
//resize image if required
        
require_once CKFINDER_CONNECTOR_LIB_DIR "/CommandHandler/Thumbnail.php";
        
$_imagesConfig $_config->getImagesConfig();

        if (
$_imagesConfig->getMaxWidth()>&& $_imagesConfig->getMaxHeight()>&& $_imagesConfig->getQuality()>0) {
            
CKFinder_Connector_CommandHandler_Thumbnail::createThumb($sFilePath$sFilePath$_imagesConfig->getMaxWidth(), $_imagesConfig->getMaxHeight(), $_imagesConfig->getQuality(), true) ;
        }

        if (
$_config->checkSizeAfterScaling()) {
            
//check file size after scaling, attempt to delete if too big
            
clearstatcache();
            if (
$maxSize && filesize($sFilePath)>$maxSize) {
                @
unlink($sFilePath);
                
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG);
            }
            else {
                
$this->_errorHandler->throwError($iErrorNumber$sFileName);
            }
        }
    }
}
?>
Онлайн: 1
Реклама