= 1073741824) return number_format($bytes / 1073741824, 2) . ' گیگابایت'; if ($bytes >= 1048576) return number_format($bytes / 1048576, 2) . ' مگابایت'; if ($bytes >= 1024) return number_format($bytes / 1024, 2) . ' کیلوبایت'; return $bytes . ' بایت'; } function get_next_id($array) { return empty($array) ? 1 : max(array_column($array, 'id')) + 1; } // ==================== بارگذاری دادهها ==================== $users = load_json(USERS_FILE); $files = load_json(FILES_FILE); // ==================== پردازش فرمها ==================== if ($_SERVER['REQUEST_METHOD'] === 'POST') { // ثبتنام if (isset($_POST['register'])) { $username = trim($_POST['username']); $password = $_POST['password']; $password_confirm = $_POST['password_confirm']; $errors = []; if (strlen($username) < 3) $errors[] = 'نام کاربری حداقل ۳ حرف باشد.'; if (strlen($password) < 6) $errors[] = 'رمز عبور حداقل ۶ حرف باشد.'; if ($password !== $password_confirm) $errors[] = 'رمز عبور و تکرار آن یکسان نیستند.'; // چک تکراری نبودن foreach ($users as $u) { if ($u['username'] === $username) { $errors[] = 'این نام کاربری قبلاً ثبت شده است.'; break; } } if (empty($errors)) { $new_user = [ 'id' => get_next_id($users), 'username' => $username, 'password' => password_hash($password, PASSWORD_DEFAULT), 'storage_used' => 0, 'created_at' => date('Y-m-d H:i:s') ]; $users[] = $new_user; save_json(USERS_FILE, $users); $_SESSION['user_id'] = $new_user['id']; $_SESSION['username'] = $username; header('Location: ' . $_SERVER['PHP_SELF']); exit; } else { $register_errors = $errors; } } // ورود if (isset($_POST['login'])) { $username = trim($_POST['username']); $password = $_POST['password']; $logged_in = false; foreach ($users as $u) { if ($u['username'] === $username && password_verify($password, $u['password'])) { $_SESSION['user_id'] = $u['id']; $_SESSION['username'] = $u['username']; $logged_in = true; break; } } if ($logged_in) { header('Location: ' . $_SERVER['PHP_SELF']); exit; } else { $login_error = 'نام کاربری یا رمز عبور اشتباه است.'; } } // خروج if (isset($_POST['logout'])) { session_destroy(); header('Location: ' . $_SERVER['PHP_SELF']); exit; } // آپلود فایل (AJAX) if (isset($_FILES['file']) && is_logged_in()) { header('Content-Type: application/json; charset=utf-8'); $response = ['success' => false, 'message' => '']; if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) { $response['message'] = 'خطا در آپلود فایل.'; echo json_encode($response); exit; } $file = $_FILES['file']; $file_size = $file['size']; $user_id = $_SESSION['user_id']; // بازخوانی کاربران برای محاسبه حجم $users = load_json(USERS_FILE); $used = get_user_storage($users, $user_id); if (($used + $file_size) > MAX_TOTAL_SPACE) { $response['message'] = 'فضای کافی ندارید. حجم باقیمانده: ' . format_bytes(MAX_TOTAL_SPACE - $used); echo json_encode($response); exit; } if ($file_size > MAX_FILE_SIZE) { $response['message'] = 'حداکثر حجم هر فایل ' . format_bytes(MAX_FILE_SIZE) . ' است.'; echo json_encode($response); exit; } $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); if (!in_array($ext, $allowed_extensions)) { $response['message'] = 'فرمت فایل پشتیبانی نمیشود.'; echo json_encode($response); exit; } if (!is_dir(UPLOAD_DIR)) mkdir(UPLOAD_DIR, 0755, true); $stored_name = uniqid('file_', true) . '.' . $ext; $dest = UPLOAD_DIR . $stored_name; if (move_uploaded_file($file['tmp_name'], $dest)) { // اضافه کردن فایل به JSON $files = load_json(FILES_FILE); $new_file = [ 'id' => get_next_id($files), 'user_id' => $user_id, 'original_name' => $file['name'], 'stored_name' => $stored_name, 'file_size' => $file_size, 'uploaded_at' => date('Y-m-d H:i:s') ]; $files[] = $new_file; save_json(FILES_FILE, $files); // بهروزرسانی حجم کاربر foreach ($users as &$u) { if ($u['id'] == $user_id) { $u['storage_used'] += $file_size; break; } } save_json(USERS_FILE, $users); $response['success'] = true; $response['message'] = 'فایل با موفقیت آپلود شد.'; $response['file'] = [ 'name' => $file['name'], 'size' => format_bytes($file_size), 'url' => UPLOAD_DIR . $stored_name, 'id' => $new_file['id'] ]; } else { $response['message'] = 'خطا در ذخیرهسازی فایل.'; } echo json_encode($response); exit; } // حذف فایل if (isset($_POST['delete_file']) && is_logged_in()) { $file_id = (int)$_POST['file_id']; $user_id = $_SESSION['user_id']; $files = load_json(FILES_FILE); $users = load_json(USERS_FILE); $file_index = -1; $file_data = null; foreach ($files as $i => $f) { if ($f['id'] == $file_id && $f['user_id'] == $user_id) { $file_index = $i; $file_data = $f; break; } } if ($file_index !== -1) { // حذف فایل از سرور $path = UPLOAD_DIR . $file_data['stored_name']; if (file_exists($path)) unlink($path); // حذف از آرایه فایلها array_splice($files, $file_index, 1); save_json(FILES_FILE, $files); // کاهش حجم کاربر foreach ($users as &$u) { if ($u['id'] == $user_id) { $u['storage_used'] = max(0, $u['storage_used'] - $file_data['file_size']); break; } } save_json(USERS_FILE, $users); header('Location: ' . $_SERVER['PHP_SELF']); exit; } } } // ==================== دریافت اطلاعات کاربر جاری ==================== $user_files = []; $used_space = 0; if (is_logged_in()) { $user_id = $_SESSION['user_id']; // بازخوانی برای اطمینان $users = load_json(USERS_FILE); $files = load_json(FILES_FILE); $used_space = get_user_storage($users, $user_id); foreach ($files as $f) { if ($f['user_id'] == $user_id) { $user_files[] = $f; } } // مرتبسازی نزولی بر اساس زمان آپلود usort($user_files, function($a, $b) { return strtotime($b['uploaded_at']) - strtotime($a['uploaded_at']); }); } ?>
هنوز فایلی آپلود نکردهاید.