PHP
move_uploaded_file()
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
-
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.
-
move_uploaded_file çağrısı
$ok = move_uploaded_file($file['tmp_name'], ____);
Cevabı göster
$ok = move_uploaded_file($file['tmp_name'], $destination);
-
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
Sıradaki ders: Dosya türü doğrulama