CodeBlanks Logo Icon CodeBlanks

move_uploaded_file()

PHP kursu · Orta seviye · Ders 77/115

move_uploaded_file() ile geçici dosyayı kalıcı konuma taşımayı öğrenirsin.

move_uploaded_file() nedir?

Yüklenen dosya önce geçici bir konuma konur. Bu konum tmp_name alanında tutulur ve betik bitince silinir. Dosyayı kalıcı bir yere taşımak için move_uploaded_file() kullanırsın.

Bu fonksiyon iki parametre alır: geçici yol (tmp_name) ve hedef yol. Örnek: move_uploaded_file($file['tmp_name'], 'uploads/foto.jpg'). Başarılıysa true, değilse false döndürür.

rename() yerine bunu kullanmak daha güvenlidir; çünkü move_uploaded_file() önce dosyanın gerçekten bir HTTP yükleme mi olduğunu denetler.

Hedef yolu oluştur

Hedef yolu oluştururken iki şeye dikkat et: klasör adı ve dosya adı. Genelde uploads/ gibi bir klasör ve orijinal dosya adını kullanırsın. Örnek: $dest = 'uploads/' . $file['name'].

Ama kullanıcı ../shell.php gibi tehlikeli bir ad gönderebilir. Bu yüzden basename() ile yalnızca dosya adını alırsın: $dest = 'uploads/' . basename($file['name']). Bu, yol saldırılarını (path traversal) engeller.

Benzersiz ad istersen uniqid() ile önek ekleyebilirsin; ama önce temel taşımayı öğren.

Uygulama saveUpload fonksiyonu

Bir saveUpload(array $file, string $dir): string fonksiyonu yaz. İçinde $destination = $dir . '/' . basename($file['name']) ile hedef yolu oluştur. move_uploaded_file($file['tmp_name'], $destination) çağrısını yap. Sonra return 'Hedef: ' . $destination döndür. Test için $_FILES['avatar'] tanımla (name: 'profil.jpg', tmp_name: '/tmp/phpAbCd.tmp', error: 0, size: 2048) ve echo saveUpload($_FILES['avatar'], 'uploads') . "\n" yaz.

Örnek çözümü göster
saveUpload içinde $destination değişkenini basename ile oluştur, move_uploaded_file çağır ve hedefi döndür.
Örnek çözüm:
<?php
// Dosya taşıma fonksiyonu
function saveUpload(array $file, string $dir): string {
    $destination = $dir . '/' . basename($file['name']);
    move_uploaded_file($file['tmp_name'], $destination);
    return "Hedef: " . $destination;
}

$_FILES['avatar'] = [
    'name' => 'profil.jpg',
    'tmp_name' => '/tmp/phpAbCd.tmp',
    'error' => 0,
    'size' => 2048
];

echo saveUpload($_FILES['avatar'], 'uploads') . "\n";

Kendini test et

  1. Yüklenen dosyayı güvenle taşımak için hangi fonksiyon?

    • rename()
    • copy()
    • move_uploaded_file()
    • unlink()
    Cevabı göster

    move_uploaded_file() — Doğru. move_uploaded_file önce yükleme denetimi yapar.

  2. move_uploaded_file çağrısı

    $ok = move_uploaded_file($file['tmp_name'], ____);
    Cevabı göster
    $ok = move_uploaded_file($file['tmp_name'], $destination);
  3. Fonksiyonları eşleştir

    move_uploaded_file
    Geçici dosyayı taşır
    basename
    Yolun dosya adını verir
    is_uploaded_file
    Yükleme mi diye denetler
    rename
    Herhangi bir dosyayı taşır

Orta seviye bölümündeki tüm dersler