147 lines
4.4 KiB
PHP
147 lines
4.4 KiB
PHP
<?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("======================");
|
||
}
|