PHP 8'de dosya yüklerken dosya özelliklerinin kontrolü, güvenlik ve dosya doğruluğu açısından oldukça önemlidir. Dosya boyutu, uzantısı, MIME türü gibi özellikleri kontrol ederek, sadece istenilen dosyaların sunucuya yüklenmesini sağlayabilirsiniz. PHP, dosya yükleme işlemi sırasında bu kontrolleri yapmak için birkaç yerleşik fonksiyon ve özellik sunar.
1. Dosya Boyutunu Kontrol Etme
Dosya boyutunu kontrol etmek, sunucunuzun aşırı yüklenmesini veya büyük dosyaların istemeden yüklenmesini önlemek için önemlidir.
Örnek:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$dosya = $_FILES['dosya'];
$dosya_boyutu = $dosya['size']; // Byte cinsinden dosya boyutu
// 2 MB (Megabyte) sınırı koyuyoruz
$max_boyut = 2 * 1024 * 1024; // 2 MB
if ($dosya_boyutu > $max_boyut) {
echo "Dosya çok büyük. Maksimum boyut: 2MB.";
} else {
echo "Dosya boyutu uygun.";
}
}
?>
-
$_FILES['dosya']['size']
: Dosyanın boyutunu byte cinsinden döndürür. -
$max_boyut
: Dosya boyutu sınırını tanımlıyoruz. 2 MB sınırına göre kontrol yapıyoruz.
2. Dosya Uzantısını Kontrol Etme
Dosya uzantısının kontrolü, sadece belirli türdeki dosyaların yüklenmesini sağlamak için kullanılır.
Örnek:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$dosya = $_FILES['dosya'];
$dosya_adi = $dosya['name'];
// Geçerli uzantılar
$gecerli_uzantilar = ['jpg', 'jpeg', 'png', 'pdf'];
// Dosyanın uzantısını almak
$dosya_uzantisi = pathinfo($dosya_adi, PATHINFO_EXTENSION);
// Uzantıyı kontrol et
if (in_array($dosya_uzantisi, $gecerli_uzantilar)) {
echo "Dosya uzantısı uygun.";
} else {
echo "Geçersiz dosya uzantısı.";
}
}
?>
-
pathinfo()
: Dosyanın uzantısını almak için kullanılır. -
in_array()
: Dosya uzantısının, geçerli uzantılar arasında olup olmadığını kontrol eder.
3. Dosyanın MIME Türünü Kontrol Etme
Dosya uzantısına güvenmek yerine, dosyanın gerçek türünü (MIME türü) kontrol etmek daha güvenlidir. Bu, dosya uzantısı değiştirilse bile dosyanın türünü doğru şekilde tespit eder.
Örnek:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$dosya = $_FILES['dosya'];
$gecici_dosya_yolu = $dosya['tmp_name'];
// Desteklenen dosya türleri
$gecerli_mime_turleri = ['image/jpeg', 'image/png', 'application/pdf'];
// Dosyanın MIME türünü al
$dosya_mime_turu = mime_content_type($gecici_dosya_yolu);
// MIME türünü kontrol et
if (in_array($dosya_mime_turu, $gecerli_mime_turleri)) {
echo "Dosya türü uygun.";
} else {
echo "Geçersiz dosya türü.";
}
}
?>
-
mime_content_type()
: Dosyanın MIME türünü döndürür. Bu yöntemle, dosyanın gerçekten hangi tür olduğunu öğrenebilirsiniz. -
in_array()
: MIME türünü kontrol eder ve geçerli türlerle karşılaştırır.
4. Dosya Yüklenirken Hataları Kontrol Etme
PHP dosya yükleme sırasında bazı hata kodları döndürebilir. Bu kodları kontrol ederek, yükleme sürecinde bir sorun olup olmadığını anlayabilirsiniz.
Örnek:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$dosya = $_FILES['dosya'];
// Hata kodunu kontrol et
if ($dosya['error'] == UPLOAD_ERR_OK) {
echo "Dosya başarıyla yüklendi.";
} else {
// Hata mesajı döndürelim
switch ($dosya['error']) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
echo "Dosya çok büyük!";
break;
case UPLOAD_ERR_PARTIAL:
echo "Dosya kısmen yüklendi!";
break;
case UPLOAD_ERR_NO_FILE:
echo "Dosya yüklenmedi!";
break;
case UPLOAD_ERR_NO_TMP_DIR:
echo "Geçici dizin eksik!";
break;
case UPLOAD_ERR_CANT_WRITE:
echo "Disk yazma hatası!";
break;
case UPLOAD_ERR_EXTENSION:
echo "Bir PHP uzantısı yüklemeyi durdurdu!";
break;
default:
echo "Bilinmeyen bir hata oluştu!";
break;
}
}
}
?>
-
$_FILES['dosya']['error']
: Dosya yükleme işlemi sırasında oluşan hataları içerir. - PHP'de yaygın hata kodları ve anlamları:
-
UPLOAD_ERR_OK
(0): Hata yok, dosya başarıyla yüklendi. -
UPLOAD_ERR_INI_SIZE
(1): PHP yapılandırma dosyasındakiupload_max_filesize
direktifini aştı. -
UPLOAD_ERR_FORM_SIZE
(2): HTML formunda belirtilenMAX_FILE_SIZE
direktifini aştı. -
UPLOAD_ERR_PARTIAL
(3): Dosya sadece kısmen yüklendi. -
UPLOAD_ERR_NO_FILE
(4): Hiçbir dosya yüklenmedi. -
UPLOAD_ERR_NO_TMP_DIR
(6): Geçici klasör bulunamadı. -
UPLOAD_ERR_CANT_WRITE
(7): Disk yazma hatası. -
UPLOAD_ERR_EXTENSION
(8): Bir PHP uzantısı yüklemeyi durdurdu.
-
5. Dosyanın Var Olup Olmadığını Kontrol Etme
Dosyanın hedef dizinde zaten mevcut olup olmadığını kontrol etmek, aynı ada sahip dosyaların üzerine yazılmasını engelleyebilir.
Örnek:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$dosya = $_FILES['dosya'];
$hedef_dizin = 'uploads/';
$dosya_adi = basename($dosya['name']);
$hedef_yol = $hedef_dizin . $dosya_adi;
// Dosyanın zaten var olup olmadığını kontrol et
if (file_exists($hedef_yol)) {
echo "Bu dosya zaten mevcut.";
} else {
if (move_uploaded_file($dosya['tmp_name'], $hedef_yol)) {
echo "Dosya başarıyla yüklendi.";
} else {
echo "Dosya yükleme sırasında hata oluştu.";
}
}
}
?>
-
file_exists()
: Dosyanın belirtilen dizinde var olup olmadığını kontrol eder.
Sonuç:
PHP 8'de dosya yükleme işlemi sırasında dosya özelliklerini kontrol ederek, sunucu güvenliğini ve veri doğruluğunu artırabilirsiniz. Dosya boyutunu, uzantısını, MIME türünü ve yükleme hatalarını kontrol ederek, yalnızca izin verilen dosyaların sunucuya yüklenmesini sağlayabilirsiniz.