make_error('не задан ключ'); } $this -> result_key = $key; } public function access_type($type){ if ( $type=='image'){ $this -> set_type('image/jpeg'); $this -> set_type('image/jpg'); $this -> set_type('image/gif'); $this -> set_type('image/png'); $this -> set_type('image/pjpeg'); $this -> set_type('image/x-png'); }else{ $this -> set_type($type); } } private function set_type($type){ $this -> result_types[]=$type; } public function access_size($size){ $this -> result_size=$size; } public function set_name($name){ if ( empty($name) ){ sys_error(ERROR_500,'Не задано имя'); } $this -> result_name = $name; return true; } public function set_dir($dir){ if ( empty($dir) ){ sys_error(ERROR_500,'Пустой каталог'); } $this -> result_path = $dir; return true; } // жёский контроль каталога в который загружается файл public function set_safe_dir($dir){ if ( empty($dir) ){ sys_error(ERROR_500,'Ошибка: не указан каталог для загрузки файлов!'); } if ( !sys_check_safe_dir($dir) ){ $this -> make_error('Ошибка: нет прав для записи в этот раздел!'); return false; } $this -> result_path = MAIN_PATH.'/media/'.$dir; return true; } static function get_safe_dir(){ return MAIN_PATH.'/media/'; } // перезаписывать файл public function set_rewrite($flag){ $this -> result_rewrite = $flag; } public function load(){ // ошибки были в прошлом if ( !empty($this -> lst_error) ){ return false; } if ( !is_array($_FILES[$this -> result_key]) ){ $this -> make_error('"'.$this -> result_key.'" не загружен'); return false; } if ( !empty($_FILES[$this -> result_key]['error']) ){ $this -> make_error(' во время загрузки произошла неизвестная ошибка'); return false; } // каталог, в который нужно писать результат if ( empty($this -> result_path) ){ $this -> make_error('Ошибка: не указан каталог для загрузки файлов!'); return false; } // да это и не каталог вовсе if ( !is_dir($this -> result_path) ){ $this -> make_error('Ошибка: адрес "'.sys_in_html($this -> result_path).'" не является каталогом '); return false; } if ( !is_writable($this -> result_path) ){ $this -> make_error('Ошибка: в каталог "'.sys_in_html($this -> result_path).'" нельзя вести запись, нет прав!'); return false; } // размер if ( !empty($this -> result_size) && ($this -> result_size < $_FILES[$this -> result_key]['size']) ){ $this -> make_error('Ошибка: максимальный размер загружаемого файла не может превышать '.$this -> result_size." !"); return false; } // контроль типа if ( !in_array($_FILES[$this -> result_key]['type'],$this -> result_types) ){ $this -> make_error('Ошибка: тип "'.sys_in_html($_FILES[$this -> result_key]['type']).'" файлов запрещён к закгрузке!'); return false; } $load_file_info = pathinfo($_FILES[$this -> result_key]['name']) ; $ext = $load_file_info['extension']; // генерируем новое имя if ( empty($this -> result_name) ){ $base = MAIN_TIME; while(2<3){ if ( !file_exists($this -> result_path.'/'.$base.'.'.$ext) ){ break; } $base++; } $this -> result_name = $base.'.'.$ext; } if ( empty($this -> result_rewrite) && file_exists($this -> result_path.'/'.$this -> result_name) ){ $this -> make_error('файл с таким именем уже существует'); return false; } // перемещаем файл if ( !@move_uploaded_file($_FILES[$this -> result_key]['tmp_name'], $this -> result_path.'/'.$this -> result_name) ){ $this -> make_error(' загрузить файл не получилось'); return false; } return true; } public function get_result_name(){ return $this -> result_name; } public function get_result_path(){ return $this -> result_path; } public function error(){ return $this -> lst_error; } private function make_error($msg){ $this -> lst_error = $msg; } } ?>