Files
simple-file-share/functions.php
2025-06-13 14:59:47 +03:00

147 lines
4.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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("======================");
}