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_SIZE yetmez; 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

Maksimum: 0 MB — İzinli uzantılar:

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.