update ui

This commit is contained in:
2025-06-13 14:59:47 +03:00
parent 0311b21d23
commit 4de96eb632
7 changed files with 1503 additions and 93 deletions

146
functions.php Normal file
View File

@@ -0,0 +1,146 @@
<?php
// Функция для преобразования размера из строки в байты
function parseFileSize($size)
{
if (is_numeric($size)) {
return intval($size);
}
$size = strtoupper(trim($size));
// Проверяем, что строка не пустая
if (empty($size)) {
return 0;
}
// Добавляем отладочную информацию
error_log("parseFileSize input: " . $size);
$units = [
'TB' => 1024 ** 4,
'GB' => 1024 ** 3,
'MB' => 1024 ** 2,
'KB' => 1024,
'B' => 1
];
// Проверяем каждую единицу измерения (начиная с самых больших)
foreach ($units as $unit => $multiplier) {
if (substr($size, -strlen($unit)) === $unit) {
$numberPart = trim(substr($size, 0, -strlen($unit)));
error_log("Found unit: $unit, number part: '$numberPart'");
if (is_numeric($numberPart)) {
$result = intval(floatval($numberPart) * $multiplier);
error_log("Calculated result: $result bytes");
return $result;
}
}
}
// Если не найдено совпадений с единицами измерения, пробуем преобразовать как число
if (is_numeric($size)) {
$result = intval($size);
error_log("Fallback to numeric: $result");
return $result;
}
error_log("Could not parse size: $size, returning 0");
return 0;
}
// Получить размер файла в байтах
function getMaxFileSize()
{
$size = parseFileSize(MAX_FILE_SIZE);
// Отладочная информация
error_log("MAX_FILE_SIZE constant: " . MAX_FILE_SIZE);
error_log("Parsed max file size: " . $size);
return $size;
}
// Получить размер чанка в байтах
function getChunkSize()
{
$size = parseFileSize(CHUNK_SIZE);
// Отладочная информация
error_log("CHUNK_SIZE constant: " . CHUNK_SIZE);
error_log("Parsed chunk size: " . $size);
return $size;
}
// Функция для генерации CSRF токена
function generateCSRFToken()
{
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
// Функция для проверки CSRF токена
function verifyCSRFToken($token)
{
return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token);
}
// Функция для валидации имени файла
function validateFileName($filename)
{
// Удаляем опасные символы и пути
$filename = basename($filename);
// Проверяем на недопустимые символы
if (preg_match('/[<>:"|?*\x00-\x1f]/', $filename)) {
return false;
}
// Проверяем длину
if (strlen($filename) > 255) {
return false;
}
// Проверяем расширение
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if (!in_array($extension, ALLOWED_EXTENSIONS)) {
return false;
}
return true;
}
// Функция для получения безопасного имени файла
function getSafeFileName($filename)
{
$filename = basename($filename);
$filename = preg_replace('/[<>:"|?*\x00-\x1f]/', '_', $filename);
return substr($filename, 0, 255);
}
// Функция для форматирования размера файла
function formatFileSize($size)
{
$units = ['B', 'KB', 'MB', 'GB'];
$unitIndex = 0;
while ($size >= 1024 && $unitIndex < count($units) - 1) {
$size /= 1024;
$unitIndex++;
}
return round($size, 2) . ' ' . $units[$unitIndex];
}
// Функция для отладки - показать все константы
function debugConstants()
{
error_log("=== DEBUG CONSTANTS ===");
error_log("MAX_FILE_SIZE: " . (defined('MAX_FILE_SIZE') ? MAX_FILE_SIZE : 'NOT DEFINED'));
error_log("CHUNK_SIZE: " . (defined('CHUNK_SIZE') ? CHUNK_SIZE : 'NOT DEFINED'));
error_log("UPLOAD_DIR: " . (defined('UPLOAD_DIR') ? UPLOAD_DIR : 'NOT DEFINED'));
error_log("CHUNK_DIR: " . (defined('CHUNK_DIR') ? CHUNK_DIR : 'NOT DEFINED'));
error_log("======================");
}