Özet - Dosya yükleme
$_FILES, move_uploaded_file ve doğrulamayla profil resmi yükleme yazarsın.
Özet - Dosya yükleme
Bu grupta dosya yüklemeyle ilgili beş temel kavramı öğrendin:
$_FILESsüper globali ile dosya üst verisini okumamove_uploaded_file()ile geçici dosyayı kalıcı konuma taşıma- MIME türü ile
in_array()doğrulaması sizealanı ile boyut sınırı kontrolüerrorkodları ile anlamlı hata mesajları
Bunları bir profil resmi yükleme fonksiyonunda birleştireceksin: önce hata kodunu, sonra türü, sonra boyutu kontrol edip dosyayı taşıyacaksın.
Uygulama Profil resmi yükleme
Bir uploadProfilePicture(array $file, string $dir): string fonksiyonu yaz. Önce $file['error'] !== UPLOAD_ERR_OK ise return 'Hata: kod ' . $file['error']. Sonra $allowed = ['image/png', 'image/jpeg'] tanımla; !in_array($file['type'], $allowed, true) ise return 'Reddedildi: ' . $file['type']. Sonra $file['size'] > 2097152 ise return 'Çok büyük: ' . $file['size']. En son $destination = $dir . '/' . basename($file['name']) ile yolu yapıp move_uploaded_file($file['tmp_name'], $destination) çağır ve return 'Tamam: ' . $destination döndür. Test için $_FILES['avatar'] tanımla (name: 'profil.png', type: 'image/png', tmp_name: '/tmp/phpAbCd.tmp', error: 0, size: 102400) ve echo uploadProfilePicture($_FILES['avatar'], 'uploads') . "\n" yaz.
Örnek çözümü göster
' + destination döndür.
Örnek çözüm:
<?php
// Profil resmi yükleme
function uploadProfilePicture(array $file, string $dir): string {
if ($file['error'] !== UPLOAD_ERR_OK) {
return "Hata: kod " . $file['error'];
}
$allowed = ['image/png', 'image/jpeg'];
if (!in_array($file['type'], $allowed, true)) {
return "Reddedildi: " . $file['type'];
}
if ($file['size'] > 2097152) {
return "Çok büyük: " . $file['size'];
}
$destination = $dir . '/' . basename($file['name']);
move_uploaded_file($file['tmp_name'], $destination);
return "Tamam: " . $destination;
}
$_FILES['avatar'] = [
'name' => 'profil.png',
'type' => 'image/png',
'tmp_name' => '/tmp/phpAbCd.tmp',
'error' => 0,
'size' => 102400
];
echo uploadProfilePicture($_FILES['avatar'], 'uploads') . "\n";
Dosya yükleme ipuçları
Dosya yüklemede aklında tutman gereken ipuçları:
- Formda her zaman
enctype="multipart/form-data"kullan. - Taşımadan önce hata kodunu, MIME türünü ve boyutu kontrol et.
- Hedef yolu oluştururken
basename()ile yol saldırılarını engelle. - Kullanıcının gönderdiği
typealanına güvenme; gerekiyorsafinfokullan. - Yüklenen dosyaları web kök dizini dışında ya da özel bir klasörde sakla.
Bir sonraki grupta oturumlar (sessions) ile kullanıcı takibine bakacağız.
Kendini test et
-
Tüm kavramları eşleştir
- $_FILES
- Dosya üst verisi
- move_uploaded_file
- Geçici dosyayı taşır
- in_array
- Türü doğrular
- $_FILES['size']
- Boyutu verir
- UPLOAD_ERR_OK
- Hata yok
-
move_uploaded_file'dan önce her zaman ne yapmalısın?
- Hata kodunu, türü ve boyutu doğrula
- Dosyayı önce echo ile yazdır
- rename çağır
- tmp_name'i sil
Cevabı göster
Hata kodunu, türü ve boyutu doğrula — Doğru. Taşımadan önce doğrulama şarttır.