PHP 8'de dosya yükleme işlemi, kullanıcıların bir web formu aracılığıyla sunucuya dosya göndermelerini sağlar. PHP'de dosya yükleme işlemi için formda enctype="multipart/form-data"
özelliği kullanılır ve dosya bilgileri $_FILES
süper global dizisi ile alınır.
Aşağıda, adım adım PHP ile nasıl dosya yüklendiğini açıklayacağım.
1. HTML Formu Oluşturma
Kullanıcının dosya seçip yükleyeceği bir HTML formu oluşturalım.
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Bir dosya seçin:</label>
<input type="file" name="dosya" id="file">
<br>
<br>
<input type="submit" value="Dosyayı Yükle">
</form>
Önemli Noktalar:
-
enctype="multipart/form-data"
: Bu, dosya yüklemeyi destekleyen bir form için gereklidir. -
input type="file"
: Dosya seçimi için kullanılan HTML elemanıdır.
2. PHP ile Dosya Yükleme İşlemi (upload.php)
Kullanıcı formu gönderdiğinde, dosyayı sunucuda belirli bir dizine yükleyecek olan PHP kodunu yazalım.
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Dosya bilgilerini al
$dosya = $_FILES['dosya'];
// Yüklenen dosyanın geçici yolu
$gecici_dosya_yolu = $dosya['tmp_name'];
// Yüklenen dosyanın adı
$dosya_adi = basename($dosya['name']);
// Dosyanın yükleneceği yer (hedef yol)
$hedef_yol = 'uploads/' . $dosya_adi;
// Dosyanın boyutu (byte cinsinden)
$dosya_boyutu = $dosya['size'];
// Desteklenen dosya türlerini belirleyelim
$gecerli_dosya_turleri = ['image/jpeg', 'image/png', 'application/pdf'];
// Dosyanın MIME türünü kontrol edelim
$dosya_turu = mime_content_type($gecici_dosya_yolu);
// Dosyanın boyut sınırını belirleyelim (örneğin 2MB)
$max_boyut = 2 * 1024 * 1024;
// Dosyanın boyutunu ve türünü kontrol et
if (in_array($dosya_turu, $gecerli_dosya_turleri) && $dosya_boyutu <= $max_boyut) {
// Dosyayı sunucuya taşı
if (move_uploaded_file($gecici_dosya_yolu, $hedef_yol)) {
echo "Dosya başarıyla yüklendi: " . $hedef_yol;
} else {
echo "Dosya yükleme sırasında hata oluştu.";
}
} else {
echo "Geçersiz dosya türü veya boyut sınırı aşıldı.";
}
} else {
echo "Dosya yüklenmedi.";
}
?>
Açıklama:
-
$_FILES['dosya']: Yüklenen dosyanın bilgilerini tutan bir dizi. Bu dizi aşağıdaki bilgilere sahiptir:
-
$_FILES['dosya']['name']
: Dosyanın orijinal adı. -
$_FILES['dosya']['tmp_name']
: Dosyanın geçici olarak kaydedildiği sunucudaki yol. -
$_FILES['dosya']['size']
: Dosyanın boyutu. -
$_FILES['dosya']['error']
: Dosya yükleme sırasında oluşan hata kodları. -
$_FILES['dosya']['type']
: Dosyanın MIME türü.
-
-
basename()
: Dosyanın orijinal adını almak için kullanılır. Güvenlik açısından kullanıcıların yüklediği dosya adını bu şekilde almak daha güvenli olabilir. -
move_uploaded_file()
: Dosyayı geçici dizinden, belirtilen hedef dizine taşır. -
Dosya Türü ve Boyutu Kontrolü:
mime_content_type()
ile dosyanın türü kontrol edilir ve belirlenen maksimum dosya boyutuna ($max_boyut
) göre kısıtlama yapılır.
3. Hedef Dizin Oluşturma
PHP dosyayı sunucuya yükleyeceği bir dizine ihtiyaç duyar. Bu nedenle, uploads
adında bir klasör oluşturup sunucunun bu klasöre yazma iznine sahip olduğundan emin olun.
Linux sunucularda, bu izni vermek için şu komutu kullanabilirsiniz:
chmod 777 uploads
4. Hata Kodları
$_FILES['dosya']['error']
hata kodları şu anlama gelir:
-
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.
Sonuç:
Bu örnek, PHP 8 ile temel bir dosya yükleme işlemini göstermektedir. Bu işlemi geliştirmek için ek doğrulamalar, güvenlik kontrolleri ve hata yönetimi ekleyebilirsiniz.