Anti-Multi File Upload System Nedir?
Kullanıcılarınızın aynı resim dosyalarını tekrar, tekrar yüklemelerini engelleyip bir nebzede olsa sunucu yükünü hafifletmeyi amaçlar.
Aşağıda kodlar verilmiştir, geliştirilmeye açık bir projedir, ben yolu gösterdim gerisi size kalmış.
Lütfen dikkat!
Bu bir ticari konu olmadığı gibi sizde benim herhangi bir profesyonel coder olduğumu düşündürtmesin. Ben PHP acemisi olduğumu her konuda belirtiyorum. Bu yüzden yorum yaparken bilhassa bunu göz önünde bulundurarak yapınız. (Ülkemiz de ne yazık ki eleştiri kültürü absürt olduğu için bu uyarı yapmak zorunda kalıyorum.)
https://youtu.be/g0YOqNUomxM <!DOCTYPE html>
<html>
<head>
<title>Kullanıcı Avatar Sistemi ^^ By OfelyaCoding </title>
</head>
<body>
<?php
require_once "db_connect.php";
session_start();
if (!isset($_SESSION["user_id"]) || empty($_SESSION["user_id"])) {
header("Location: login.php");
exit();
}
$userID = $_SESSION["user_id"];
try {
// PDO bağlantısını oluşturalım
// Kullanıcının mevcut avatarını alalım
$query = $db->prepare("SELECT profilepicture FROM users WHERE id = :username");
$query->bindParam(':username', $userID);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
$currentAvatar = $result['profilepicture'];
// Avatar güncelleme formunu oluşturalım
echo '<h1>Kullanıcı Avatar Güncelleme</h1>';
echo '<img src="https://enyorum.net/v2/' . $currentAvatar . '" alt="Mevcut Avatar"><br>';
echo '<form action="profile2.php" method="post" enctype="multipart/form-data">';
echo '<input type="file" name="avatar" id="avatar" accept="image/*"><br>';
echo '<input type="submit" name="submit" value="Güncelle">';
echo '</form>';
// Form gönderildiğinde yeni avatarı kaydedelim
if (isset($_POST['submit'])) {
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
$avatarTmpName = $_FILES['avatar']['tmp_name'];
$avatarName = $_FILES['avatar']['name'];
$extension = pathinfo($avatarName, PATHINFO_EXTENSION);
$uniqueFileName = uniqid('', true) . '.' . $extension; // Benzersiz bir dosya adı oluştur
$avatarPath = 'uploads/' . $uniqueFileName; // Dosya adını avatar yoluna ekle
// Dosya türü kontrolü
$allowedTypes = ['image/jpeg', 'image/png'];
$fileType = $_FILES['avatar']['type'];
if (!in_array($fileType, $allowedTypes)) {
echo '<p>Yalnızca JPEG ve PNG formatında resimler kabul edilir!</p>';
exit;
}
// Dosya boyutu kontrolü (1 MB = 1048576 byte)
$maxFileSize = 1048576;
$fileSize = $_FILES['avatar']['size'];
if ($fileSize > $maxFileSize) {
echo '<p>Yüklenen dosya 1 MB\'tan büyük olamaz!</p>';
exit;
}
/* Eski avatardan kurtulalım
if (file_exists($currentAvatar) && $currentAvatar !== 'avatars/default-avatar.png') {
unlink($currentAvatar);
} */
$md5Hash = md5_file($avatarTmpName);
// Mevcut avatarın MD5 hash değerini alalım
$query = $db->prepare("SELECT md5Hash, file_name FROM uploaded_images WHERE user_id = :user_id");
$query->bindParam(':user_id', $userID);
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
// MD5 hash değerini arayarak dosya adını bulalım
$guncelavatar = '';
foreach ($result as $row) {
if ($row['md5Hash'] === $md5Hash) {
$guncelavatar = $row['file_name'];
break;
}
}
// Eğer $guncelavatar hala boş ise, yeni resim yüklenecektir.
if (empty($guncelavatar)) {
// Yeni resmin bilgilerini uploaded_images tablosuna ekleyelim
$query = $db->prepare("INSERT INTO uploaded_images (file_name, user_id, md5Hash) VALUES (:file_name, :user_id, :md5Hash)");
$query->bindParam(':file_name', $avatarPath);
$query->bindParam(':user_id', $userID);
$query->bindParam(':md5Hash', $md5Hash);
$query->execute();
move_uploaded_file($avatarTmpName, $avatarPath);
// Yeni avatarın dosya adını profil resmi olarak güncelleyelim
$query = $db->prepare("UPDATE users SET profilepicture = :avatar_path WHERE id = :user_id");
$query->bindParam(':avatar_path', $avatarPath);
$query->bindParam(':user_id', $userID);
$query->execute();
} else {
// Eğer $guncelavatar dolu ise, mevcut profil resmini güncelleyelim
$query = $db->prepare("UPDATE users SET profilepicture = :avatar_path WHERE id = :user_id");
$query->bindParam(':avatar_path', $guncelavatar);
$query->bindParam(':user_id', $userID);
$query->execute();
}
// Yeni avatara geçelim
/*Veritabanında avatar yolunu güncelleyelim
$query = $db->prepare("UPDATE users SET profilepicture = :avatar_path WHERE id = :username");
$query->bindParam(':avatar_path', $avatarPath);
$query->bindParam(':username', $userID);
$query->execute();
*/
// Sayfayı yeniden yükleyelim
header("Location: profile2.php");
exit;
}
else{
echo "Herhangi bir dosya seçilmedi!";
}
}
} catch (PDOException $e) {
echo 'Hata: ' . $e->getMessage();
}
?>
</body>
</html>