PHP - Dosya Yükleme İşlemi (File Upload)
PHP ile dosya yüklemek için formda enctype="multipart/form-data" kullanılmalıdır.
Sunucu tarafında mutlaka boyut, uzantı ve tercihen MIME kontrolü yapılmalıdır.
Püf Noktalar
move_uploaded_file()ile hedef yol mutlaka klasör + dosya adı olmalı.- Kullanıcının gönderdiği dosya adını direkt kullanma; güvenli isim üret.
- Sadece
MAX_FILE_SIZEyetmez; server-side$file['size']kontrolü şart. - Klasör yazma izni yoksa yükleme başarısız olur (Linux: 755/775 gibi).
Dosya Yükleme Formu
Kod Örneği (Özet)
Özet: Dosya doğrulama + taşıma
<?php
$uploadDir = $_SERVER['DOCUMENT_ROOT'] . "/dosyalar/";
$maxSize = 2 * 1024 * 1024;
$allowedExt = ["jpg","jpeg","png","pdf","zip"];
$file = $_FILES['userfile'];
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if ($file['size'] > $maxSize) die("Dosya büyük");
if (!in_array($ext, $allowedExt, true)) die("Uzantı yasak");
$safeName = date("Ymd_His") . "_" . bin2hex(random_bytes(6)) . "." . $ext;
$target = $uploadDir . $safeName;
if (move_uploaded_file($file['tmp_name'], $target)) {
echo "Yüklendi: " . $safeName;
} else {
echo "Yüklenemedi";
}
?>
Detaylı Açıklama
- Form:
enctype="multipart/form-data"olmadan dosya gelmez. - $_FILES: Dosya bilgileri
$_FILES['userfile']içinde gelir (name, tmp_name, size, error...). - tmp_name: PHP’nin geçici klasöründe durur. Kalıcı yere taşımak için
move_uploaded_fileşart. - Güvenlik: Uzantı ve MIME kontrolü + güvenli dosya adı üretimi önerilir.