'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif', 'webp' => 'image/webp', 'svg' => 'image/svg+xml', 'bmp' => 'image/bmp', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'ico' => 'image/x-icon', 'heic' => 'image/heic', 'heif' => 'image/heif', 'avif' => 'image/avif', // Документы 'pdf' => 'application/pdf', 'txt' => 'text/plain', 'rtf' => 'application/rtf', 'doc' => 'application/msword', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'odt' => 'application/vnd.oasis.opendocument.text', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', 'odp' => 'application/vnd.oasis.opendocument.presentation', 'ppt' => 'application/vnd.ms-powerpoint', 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'epub' => 'application/epub+zip', 'mobi' => 'application/x-mobipocket-ebook', // Архивы 'zip' => 'application/zip', 'rar' => 'application/vnd.rar', '7z' => 'application/x-7z-compressed', 'tar' => 'application/x-tar', 'gz' => 'application/gzip', 'bz2' => 'application/x-bzip2', 'xz' => 'application/x-xz', 'iso' => 'application/x-iso9660-image', // Видео 'mp4' => 'video/mp4', 'avi' => 'video/x-msvideo', 'mkv' => 'video/x-matroska', 'mov' => 'video/quicktime', 'webm' => 'video/webm', 'flv' => 'video/x-flv', 'wmv' => 'video/x-ms-wmv', 'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'm4v' => 'video/x-m4v', '3gp' => 'video/3gpp', 'ogv' => 'video/ogg', // Аудио 'mp3' => 'audio/mpeg', 'wav' => 'audio/wav', 'flac' => 'audio/flac', 'ogg' => 'audio/ogg', 'aac' => 'audio/aac', 'm4a' => 'audio/mp4', 'wma' => 'audio/x-ms-wma', 'opus' => 'audio/opus', 'aiff' => 'audio/aiff', // Данные 'json' => 'application/json', 'xml' => 'application/xml', 'csv' => 'text/csv', 'xls' => 'application/vnd.ms-excel', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'yaml' => 'text/yaml', 'yml' => 'text/yaml', 'toml' => 'text/toml', // Код 'html' => 'text/html', 'htm' => 'text/html', 'css' => 'text/css', 'js' => 'text/javascript', 'php' => 'text/x-php', 'py' => 'text/x-python', 'java' => 'text/x-java-source', 'cpp' => 'text/x-c++src', 'c' => 'text/x-csrc', 'h' => 'text/x-chdr', 'cs' => 'text/x-csharp', 'rb' => 'text/x-ruby', 'go' => 'text/x-go', 'rs' => 'text/x-rust', 'sql' => 'text/x-sql', 'md' => 'text/markdown', 'log' => 'text/plain', 'sh' => 'text/x-shellscript', 'bat' => 'text/x-msdos-batch', // Веб и CMS 'wpress' => 'application/octet-stream', 'backup' => 'application/octet-stream', 'bak' => 'application/octet-stream', 'db' => 'application/x-sqlite3', 'sqlite' => 'application/x-sqlite3', 'sqlite3' => 'application/x-sqlite3', // Шрифты 'ttf' => 'font/ttf', 'otf' => 'font/otf', 'woff' => 'font/woff', 'woff2' => 'font/woff2', 'eot' => 'application/vnd.ms-fontobject', // Дизайн 'psd' => 'image/vnd.adobe.photoshop', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'indd' => 'application/x-indesign', // CAD 'dwg' => 'image/vnd.dwg', 'dxf' => 'image/vnd.dxf', 'obj' => 'model/obj', 'stl' => 'model/stl', // Мобильные приложения и исполняемые файлы 'apk' => 'application/vnd.android.package-archive', 'ipa' => 'application/octet-stream', 'exe' => 'application/x-msdownload', 'msi' => 'application/x-msi', 'deb' => 'application/vnd.debian.binary-package', 'rpm' => 'application/x-rpm', 'dmg' => 'application/x-apple-diskimage', 'pkg' => 'application/x-newton-compatible-pkg', // Прочие 'torrent' => 'application/x-bittorrent', 'ics' => 'text/calendar', 'vcf' => 'text/vcard', 'gpx' => 'application/gpx+xml', 'kml' => 'application/vnd.google-earth.kml+xml', 'kmz' => 'application/vnd.google-earth.kmz' ]; $mimeType = $mimeTypes[$extension] ?? 'application/octet-stream'; header('Content-Type: ' . $mimeType); header('Content-Length: ' . filesize($filepath)); header('Content-Disposition: inline; filename="' . $filename . '"'); header('Cache-Control: public, max-age=31536000'); // Кеш на год readfile($filepath); exit; } else { http_response_code(404); echo '404 - Файл не найден'; exit; } } // Проверка авторизации if (!isset($_SESSION['logged_in']) || ($_GET['action'] ?? '') === 'logout') { if ($_SERVER['REQUEST_METHOD'] === 'POST') { $password = $_POST['password'] ?? ''; $csrf_token = $_POST['csrf_token'] ?? ''; // Проверяем CSRF токен if (!verifyCSRFToken($csrf_token)) { $error = 'Ошибка безопасности. Попробуйте еще раз.'; } elseif (password_verify($password, PASSWORD_HASH)) { $_SESSION['logged_in'] = true; header("Location: index.php"); exit; } else { $error = 'Неверный пароль'; } } $csrf_token = generateCSRFToken(); echo ' Вход - Файловое хранилище

Вход в систему

' . (isset($error) ? '
' . htmlspecialchars($error) . '
' : '') . '
'; exit; } // Удаление файла if (isset($_GET['delete']) && isset($_GET['csrf_token'])) { if (verifyCSRFToken($_GET['csrf_token'])) { $filename = basename($_GET['delete']); $filepath = UPLOAD_DIR . $filename; if (file_exists($filepath)) { @unlink($filepath); $message = 'Файл удален успешно'; } else { $error = 'Файл не найден'; } } else { $error = 'Ошибка безопасности'; } header("Location: index.php" . (isset($message) ? "?msg=" . urlencode($message) : (isset($error) ? "?err=" . urlencode($error) : ""))); exit; } // Показ сообщений $message = $_GET['msg'] ?? null; $error = $_GET['err'] ?? null; $files = array_diff(scandir(UPLOAD_DIR), ['.', '..']); $csrf_token = generateCSRFToken(); // Функция для форматирования размера файла уже в functions.php ?> Файловое хранилище

Файловое хранилище

Выйти
Нажмите для выбора файла или перетащите файл сюда

Файлы не загружены