db_query("SELECT * FROM `bive_files` WHERE `id` = ?", array($file_id), true); if(!count($keys)) return false; return $keys[0]; } // Удалить файл по его ID public function file_delete($file_id): bool { $db_file = $this->file_get($file_id); if(!$db_file) return false; $file_path = ROOT_DIR . SLASH . STORAGE_DIR_NAME . "/files/" . $db_file["file_name"]; unlink($file_path); $this->db_query("DELETE FROM `bive_files` WHERE `id` = ?", array($file_id), true); return true; } // Проверить есть ли файл по его ID public function file_has($file_id): bool { $db_file = $this->file_get($file_id); if($db_file === false) return false; $file_path = ROOT_DIR . SLASH . STORAGE_DIR_NAME . "/files/" . $db_file["file_name"]; return file_exists($file_path); } // Получить ссылку на файл по ID public function file_get_link($file_id) { $db_file = $this->file_get($file_id); if($db_file === false) return false; return $this->router_get_root_uri() . "/" . STORAGE_DIR_NAME . "/files/" . $db_file["file_name"]; } // Сохранить файл и вернуть его ID в базе public function files_save($file, $max_size = 5242880, $file_types = array("jpeg", "jpg", "png", "svg", "webp")) { if(!isset($file) || $file["error"] != 0) return false; $storage = $this->get_storage_dir(); $file_name = $file["name"]; $file_size = $file["size"]; $file_type = strtolower(pathinfo(SLASH . $file_name, PATHINFO_EXTENSION)); if ($file_size > $max_size) { $this->alerts_add("Размер файла превышает минимально допустимый.", "error", "file"); return false; } $db_name = $this->files_create_name() . "." . $file_type; $targetDir = $storage . SLASH . "files" . SLASH; // Директория для сохранения загруженных файлов $targetFile = $targetDir . basename($db_name); // Полный путь до файла if(!in_array($file_type, $file_types)) { $this->alerts_add("Недопустимое расширение файла.", "error", "file"); return false; } if (move_uploaded_file($file["tmp_name"], $targetFile)) { return $this->files_db_add($db_name, $file_size, $file_type, $targetFile); } else { $this->alerts_add("Произошла ошибка при загрузке файла.", "error", "file"); return false; } } // Сохранить файлы по имени поля public function files_save_by_name($name, $max_size = 5242880, $file_types = array("jpeg", "jpg", "png", "svg", "webp")) { if(!isset($_FILES[$name]) || $_FILES[$name]["error"] != 0) return false; return $this->files_save($_FILES[$name], $max_size, $file_types); } // Добавление файла в базу данных public function files_db_add($file_name, $weight, $mime_type, $path) { global $b; return $b->db_insert("INSERT INTO `bive_files`(`path`, `mime_type`, `weight`, `file_name`) VALUES (?, ?, ?, ?)", array($path, $mime_type, $weight, $file_name)); } // Форматирование файлов под поле public function files_field_formate($name) { $file = $_FILES[$name]; if(!isset($file)) return false; if(is_string($file["name"])) return $file; $fields = array(); $this->files_field_formate_recurse($file, $fields); return $fields; } // Рекурсивная функция форматирования файлов private function files_field_formate_recurse($files_array, &$fields, $prop = null) { foreach ($files_array as $prop_key => $prop_value) { if(is_array($prop_value)){ if($prop) $this->files_field_formate_recurse($prop_value,$fields[$prop_key], $prop); else $this->files_field_formate_recurse($prop_value,$fields, $prop_key); } else { $fields[$prop_key][$prop] = $prop_value; } } } // Рандомное название для файла public function files_create_name() { return bin2hex(random_bytes(16)); } }