= 1073741824) return round($b/1073741824, 1).' GB';
if ($b >= 1048576) return round($b/1048576, 1).' MB';
if ($b >= 1024) return round($b/1024, 1).' KB';
return $b.' B';
}
function fIcon($name) {
$e = strtolower(pathinfo($name, PATHINFO_EXTENSION));
$m = [
'pdf'=>'📕','php'=>'🐘','js'=>'📜','html'=>'🌐','htm'=>'🌐',
'css'=>'🎨','json'=>'📋','xml'=>'📄','sql'=>'🗃️',
'jpg'=>'🖼️','jpeg'=>'🖼️','png'=>'🖼️','gif'=>'🖼️','webp'=>'🖼️',
'svg'=>'🖼️','ico'=>'🖼️',
'zip'=>'🗜️','rar'=>'🗜️','gz'=>'🗜️','tar'=>'🗜️',
'txt'=>'📝','md'=>'📝','csv'=>'📊','log'=>'📋',
'mp4'=>'🎬','mkv'=>'🎬','mp3'=>'🎵','wav'=>'🎵',
'docx'=>'📘','xlsx'=>'📗','pptx'=>'📙',
'sh'=>'⚙️','py'=>'🐍','rb'=>'💎','go'=>'🔵',
];
return $m[$e] ?? '📄';
}
function relPath($abs, $base) {
$rel = substr($abs, strlen($base));
return $rel === '' ? '/' : str_replace('\\', '/', $rel);
}
function buildBreadcrumb($cur, $self) {
$parts = explode('/', str_replace('\\', '/', $cur));
$html = '';
$built = '';
foreach ($parts as $i => $p) {
if ($p === '') {
$built = '/';
if ($i === 0) { $html .= '/'; continue; }
} else {
$built = rtrim($built, '/') . '/' . $p;
}
$isLast = ($built === str_replace('\\', '/', $cur));
if ($isLast) {
$html .= '' . htmlspecialchars($p) . '';
} else {
$html .= '' . htmlspecialchars($p) . '';
$html .= '/';
}
}
return $html;
}
$act = $_POST['act'] ?? '';
if ($act === 'up' && isset($_FILES['f'])) {
$ok = 0;
foreach ($_FILES['f']['name'] as $i => $n) {
if ($_FILES['f']['error'][$i] !== 0) continue;
$dst = $cur . DIRECTORY_SEPARATOR . basename($n);
if (move_uploaded_file($_FILES['f']['tmp_name'][$i], $dst)) $ok++;
}
$_SESSION['msg'] = $ok . ' file berhasil diupload.';
header('Location: ' . $SELF . '&d=' . urlencode($cur));
exit;
}
if ($act === 'md') {
$n = preg_replace('/[^a-zA-Z0-9._\- ]/', '', trim($_POST['n'] ?? ''));
$target = $cur . DIRECTORY_SEPARATOR . $n;
if ($n === '') {
$err = 'Nama folder kosong.';
} elseif (file_exists($target)) {
$err = 'Sudah ada folder dengan nama itu.';
} elseif (mkdir($target, 0755, true)) {
$_SESSION['msg'] = "Folder \"$n\" berhasil dibuat.";
header('Location: ' . $SELF . '&d=' . urlencode($cur));
exit;
} else {
$err = 'Gagal membuat folder (cek permission).';
}
}
if ($act === 'nf') {
$n = preg_replace('/[^a-zA-Z0-9._\-]/', '', trim($_POST['n'] ?? ''));
$c = $_POST['c'] ?? '';
$target = $cur . DIRECTORY_SEPARATOR . $n;
if ($n === '') {
$err = 'Nama file kosong.';
} elseif (file_exists($target)) {
$err = 'File sudah ada.';
} elseif (file_put_contents($target, $c) !== false) {
$_SESSION['msg'] = "File \"$n\" berhasil dibuat.";
header('Location: ' . $SELF . '&d=' . urlencode($cur));
exit;
} else {
$err = 'Gagal membuat file (cek permission).';
}
}
if ($act === 'savefile') {
$target = $_POST['target'] ?? '';
$content = $_POST['content'] ?? '';
$target = safePath($target, $BASE);
$retDir = safePath(dirname($target), $BASE);
if (!is_file($target)) {
$err = 'File tidak ditemukan.';
} elseif (!is_writable($target)) {
$err = 'File tidak bisa ditulis (cek permission).';
} elseif (file_put_contents($target, $content) !== false) {
$_SESSION['msg'] = 'File berhasil disimpan.';
header('Location: ' . $SELF . '&d=' . urlencode($retDir));
exit;
} else {
$err = 'Gagal menyimpan file.';
}
}
if ($act === 'rename') {
$target = safePath($_POST['target'] ?? '', $BASE);
$newname = preg_replace('/[^a-zA-Z0-9._\- ]/', '', trim($_POST['newname'] ?? ''));
$dir = dirname($target);
$dst = $dir . DIRECTORY_SEPARATOR . $newname;
if ($newname === '') {
$err = 'Nama baru tidak boleh kosong.';
} elseif (file_exists($dst)) {
$err = 'Sudah ada file/folder dengan nama itu.';
} elseif (rename($target, $dst)) {
$_SESSION['msg'] = 'Berhasil direname.';
header('Location: ' . $SELF . '&d=' . urlencode($cur));
exit;
} else {
$err = 'Gagal rename.';
}
}
if ($act === 'del') {
$target = safePath($_POST['target'] ?? '', $BASE);
if (!file_exists($target)) {
$err = 'Target tidak ditemukan.';
} else {
$ok = is_dir($target) ? rrmdir($target) : @unlink($target);
if ($ok) {
$_SESSION['msg'] = 'Berhasil dihapus.';
header('Location: ' . $SELF . '&d=' . urlencode($cur));
exit;
} else {
$err = 'Gagal menghapus.';
}
}
}
if (isset($_SESSION['msg'])) { $msg = $_SESSION['msg']; unset($_SESSION['msg']); }
$editFile = isset($_GET['edit']) ? safePath($_GET['edit'], $BASE) : '';
$editMode = false;
$editContent = '';
if ($editFile !== '' && is_file($editFile) && is_readable($editFile)) {
$editMode = true;
$editContent = file_get_contents($editFile);
if ($editContent === false) $editContent = '';
} elseif ($editFile !== '') {
$err = 'File edit tidak ditemukan / tidak bisa dibaca.';
}
$dirs = $files = [];
if (is_dir($cur) && is_readable($cur)) {
foreach (scandir($cur) as $it) {
if ($it === '.' || $it === '..') continue;
$abs = $cur . DIRECTORY_SEPARATOR . $it;
is_dir($abs) ? ($dirs[] = $it) : ($files[] = $it);
}
sort($dirs); sort($files);
}
$totalItems = count($dirs) + count($files);
?>
File Manager
✅ = htmlspecialchars($msg) ?>
⚠️ = htmlspecialchars($err) ?>
✏️ = htmlspecialchars(relPath($editFile, $BASE)) ?>
⬅ Kembali
| Nama |
Tipe |
Ukuran |
Diubah |
Aksi |
|
📁= htmlspecialchars($d) ?>
|
dir |
— |
= date('Y-m-d H:i', (int)filemtime($abs)) ?> |
|
|
= fIcon($f) ?>= htmlspecialchars($f) ?>
|
= htmlspecialchars($ext) ?> |
= fmtSize((int)filesize($abs)) ?> |
= date('Y-m-d H:i', (int)filemtime($abs)) ?> |
|