/** * Copy an image uploaded with HTML form to the specified directory. * In view scripts one should use something like <img src="{$fileBaseDir}/{@return}"/> * * @param string $paramName Parameter name as it passed by a form. * @param string $fileBaseDir A base directory constant for the file (should be used in view scripts as prefix before $filePath from DB table). * @return string New file's name. * @throws CException */ public static function uploadFile($paramName, $fileBaseDir) { if(empty($_FILES[AutoAdmin::INPUT_PREFIX]['tmp_name'][$paramName]) || !empty($_FILES[AutoAdmin::INPUT_PREFIX]['error'][$paramName])) throw new AAException(Yii::t('AutoAdmin.errors', 'An error occured with uploading of the file for field "{field}"', array('{field}'=>$paramName))); $uploadedFileName =& $_FILES[AutoAdmin::INPUT_PREFIX]['name'][$paramName]; $newfname = ''; $toDir = self::srcToPath($fileBaseDir); $newfname = mb_strtolower(mb_substr($uploadedFileName, 0, mb_strrpos($uploadedFileName, '.'))); $newfname = AAHelperText::translite($newfname); $newfname = str_replace(' ', '_', $newfname); $newfname = preg_replace('/[^a-z\-\_0-9]/ui', '', $newfname); if(mb_strlen($newfname)>60) $newfname = mb_substr($newfname, 0, 60); $ext = mb_substr(mb_strrchr($uploadedFileName, '.'), 1); if(!is_dir($toDir)) { if(!mkdir($toDir, 0777, true)) throw new AAException(Yii::t('AutoAdmin.errors', 'The directory "{dirname}" cannot be created', array('{dirname}'=>$toDir))); } while(file_exists($toDir.DIRECTORY_SEPARATOR.$newfname.'.'.$ext)) $newfname .= '_'.rand(0, 9); $newfname .= ".{$ext}"; if(!copy($_FILES[AutoAdmin::INPUT_PREFIX]['tmp_name'][$paramName], $toDir.DIRECTORY_SEPARATOR.$newfname)) throw new AAException(Yii::t('AutoAdmin.errors', 'The file ({filename}) cannot be copied', array('{filename}'=>$newfname))); return $newfname; }
function copyImage($var, $uploadDir='/i/other') { $newFileName = ''; $newFileName = mb_strtolower(mb_substr($_FILES[$var]['name'], 0, mb_strrpos($_FILES[$var]['name'], '.'))); $newFileName = AAHelperText::translite($newFileName); $newFileName = str_replace(' ', '_', $newFileName); $newFileName = preg_replace('/[^a-z\-\_0-9]/ui', '', $newFileName); if(mb_strlen($newFileName)>60) $newFileName = mb_substr($newFileName, 0, 60); $ext = mb_strrchr($_FILES[$var]['name'], '.'); $newFileName .= $ext; $fileLinkDir = $uploadDir; $targetPath = Yii::app()->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.Yii::app()->modules['autoadmin']['wwwDirName'].str_replace('/', DIRECTORY_SEPARATOR, $uploadDir); if(!is_dir($targetPath)) { if(!mkdir($targetPath)) throw new CHttpException(406, "Указанная в настройках директория [{$fileLinkDir}] не существует и не может быть создана."); } $targetPath .= DIRECTORY_SEPARATOR.$newFileName; if(!copy($_FILES[$var]['tmp_name'], $targetPath)) throw new CHttpException(406, "Файл невозможно сохранить в указанной в настройках директории [{$fileLinkDir}]. Вероятнее всего, проблемы с правами."); if(!getimagesize($targetPath)) { throw new CHttpException(406, "Загружаемый файл не является изображением допустимого формата."); } return $fileLinkDir.'/'.$newFileName; }