session_start();if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit();}// Ambil path dari URL jika ada$dir = isset($_GET['path']) ? $_GET['path'] : './';$file = isset($_GET['file']) ? $dir . basename($_GET['file']) : '';$content = '';$message = '';$status = '';// Periksa apakah file valid dan adaif (file_exists($file) && is_file($file)) { // Ambil konten file jika bisa dibaca if (is_readable($file)) { $content = file_get_contents($file); } else { $message = "File tidak dapat dibaca."; $status = "danger"; }} else { $message = "File tidak ditemukan atau bukan file yang valid."; $status = "danger";}// Tangani permintaan penyimpananif ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['content'])) { if (is_writable($file)) { file_put_contents($file, $_POST['content']); $message = "File berhasil disimpan."; $status = "success"; } else { $message = "Maaf, file tidak dapat ditulis."; $status = "danger"; } // Redirect kembali ke halaman manajer file dengan pesan header('Location: file.php?path=' . urlencode($dir) . '&alert_message=' . urlencode($message) . '&alert_status=' . urlencode($status)); exit;}<!DOCTYPE html><html lang="id">
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">Edit File <title>Edit File</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/codemirror.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/theme/dracula.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"> <style> .CodeMirror { border: 1px solid #dee2e6; height: auto; min-height: 500px; } .container { max-width: 900px; } </style> <div class="container mt-5"> <div class="d-flex justify-content-between align-items-center mb-4"> <h1 class="mb-0">Edit File: echo htmlspecialchars(basename($file)); <a href="file.php?path= echo urlencode($dir); " class="btn-close" aria-label="Close"></a> </div> // Tampilkan alert jika ada pesan yang dikirim melalui URL if (isset($_GET['alert_message']) && isset($_GET['alert_status'])) { $alert_type = $_GET['alert_status']; echo '<div id="myAlert" class="alert alert-' . $alert_type . ' alert-dismissible fade show" role="alert">'; echo htmlspecialchars($_GET['alert_message']); echo '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>'; echo '</div>'; } </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/codemirror.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/mode/xml/xml.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/mode/css/css.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/mode/javascript/javascript.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/mode/htmlmixed/htmlmixed.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/edit/matchbrackets.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/selection/active-line.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/display/rulers.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/display/fullscreen.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/lint/lint.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/lint/json-lint.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/lint/css-lint.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/lint/javascript-lint.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/foldcode.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/foldgutter.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/xml-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/brace-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/indent-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/markdown-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/comment-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/search/searchcursor.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/search/search.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/dialog/dialog.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/hint/show-hint.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/comment/comment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/selection/mark-selection.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/selection/active-line.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/edit/closetag.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/edit/closebrackets.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/edit/matchtags.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/edit/matchbrackets.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/runmode/runmode.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/lint/lint.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/foldcode.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/foldgutter.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/brace-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/comment-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/indent-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/fold/xml-fold.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/addon/display/rulers.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/keymap/sublime.min.js"></script> <script> var editor = CodeMirror.fromTextArea(document.getElementById("code-editor"), { lineNumbers: true, mode: "htmlmixed", theme: "dracula", indentUnit: 4, indentWithTabs: true, styleActiveLine: true, matchBrackets: true }); var filename = " echo basename($file); "; var extension = filename.split('.').pop(); var mode = "htmlmixed"; if (extension === 'js') { mode = 'javascript'; } else if (extension === 'css') { mode = 'css'; } else if (extension === 'json') { mode = 'application/json'; } else if (extension === 'php') { mode = 'htmlmixed'; } editor.setOption("mode", mode); // Skrip untuk menyembunyikan alert secara otomatis document.addEventListener('DOMContentLoaded', function() { var myAlert = document.getElementById('myAlert'); if (myAlert) { setTimeout(function() { var bsAlert = new bootstrap.Alert(myAlert); bsAlert.close(); }, 3000); // 3000 milidetik = 3 detik } }); </script>