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("======================"); }