Вход Регистрация
Файл: 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 === -1 && CKFinder_Connector_Utils_FileSystem::detectHtml($sFilePath) === true) {
                        @
unlink($sFilePath);
                        
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_WRONG_HTML_FILE);
                    }
                    else if (isset(
$isImageValid) && $isImageValid === -1 && 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, $sFileName, false);
        }

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

        if (
$_imagesConfig->getMaxWidth()>0 && $_imagesConfig->getMaxHeight()>0 && $_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);
            }
        }
    }
}
?>
Онлайн: 3
Реклама