PHP ile dosya yükleme işlemi, web uygulamalarında sık kullanılan bir özellik olup, genellikle kullanıcıların dosya (resim, belge, video vb.) göndermesi gereken formlar aracılığıyla yapılır. Bu yazıda, PHP ile dosya yükleme işleminin nasıl yapılacağını adım adım açıklayacağız.
1. HTML Form Oluşturma
Dosya yükleme işlemi için öncelikle bir HTML formu oluşturulmalıdır. Bu form, dosya seçme alanı içerir ve
enctype
özelliği "multipart/form-data"
olarak ayarlanmalıdır.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHP Dosya Yükleme</title>
</head>
<body>
<h2>Dosya Yükleme Formu</h2>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Bir dosya seçin:</label>
<input type="file" name="file" id="file">
<input type="submit" value="Yükle" name="submit">
</form>
</body>
</html>
2. PHP ile Dosya Yükleme Mantığı
Yüklenen dosyaları işlemek için, formun
action
parametresine belirtilen upload.php
dosyasında işlemleri gerçekleştireceğiz.Bu dosyada, PHP’nin
$_FILES
süper global değişkenini kullanarak yüklenen dosyaya erişeceğiz. PHP'de dosya yükleme işlemini doğru ve güvenli bir şekilde yapmak için aşağıdaki adımları izleyeceğiz.3. PHP Dosya Yükleme Adımları
Aşağıda dosyanın yüklendiği dosya olan
upload.php
dosyasını adım adım açıklayalım.<?php
// Dosyanın yüklenip yüklenmediğini kontrol et
if (isset($_POST['submit'])) {
// Yüklenen dosyaya PHP tarafından atanan geçici ad ve diğer bilgiler
$file = $_FILES['file'];
// Dosya bilgileri
$fileName = $_FILES['file']['name']; // Dosya adı
$fileTmpName = $_FILES['file']['tmp_name']; // Geçici dosya adı
$fileSize = $_FILES['file']['size']; // Dosya boyutu
$fileError = $_FILES['file']['error']; // Hata durumu
$fileType = $_FILES['file']['type']; // Dosya türü
// Yüklenmek istenen dosyanın uzantısını alma
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
$allowed = ['jpg', 'jpeg', 'png', 'pdf']; // İzin verilen dosya türleri
// Dosyanın uzantısının izin verilenler arasında olup olmadığını kontrol et
if (in_array($fileExt, $allowed)) {
// Hata olup olmadığını kontrol et
if ($fileError === 0) {
// Dosya boyutunu kontrol et (örneğin, en fazla 2MB)
if ($fileSize < 2000000) {
// Dosyayı yükleme klasörüne benzersiz isimle kaydetme
$fileNewName = uniqid('', true) . "." . $fileExt;
$fileDestination = 'uploads/' . $fileNewName;
// Dosyayı hedef klasöre taşı
if (move_uploaded_file($fileTmpName, $fileDestination)) {
echo "Dosya başarıyla yüklendi!";
} else {
echo "Dosya yüklenirken bir hata oluştu.";
}
} else {
echo "Dosyanız çok büyük.";
}
} else {
echo "Dosya yüklenirken bir hata oluştu.";
}
} else {
echo "Bu dosya türüne izin verilmiyor.";
}
} else {
echo "Herhangi bir dosya yüklenmedi.";
}
?>
4. PHP Dosya Yükleme Kodu Açıklaması
- $_FILES Süper Globali: Dosya yükleme işlemlerinde, HTML formundan gönderilen dosyalar
$_FILES
dizisi içinde saklanır. $_FILES['file']
ifadesiyle, formdaki "file" alanından gelen dosyayı temsil eder.
-
name
: Yüklenen dosyanın orijinal adı.
-
tmp_name
: Dosyanın PHP tarafından geçici olarak saklandığı dosya adı.
-
size
: Dosyanın boyutu (byte cinsinden).
-
error
: Yükleme sırasında meydana gelen herhangi bir hata (0 ise hata yoktur).-
type
: Dosyanın MIME türü.- Dosya Uzantısı Kontrolü:
pathinfo()
fonksiyonu ile dosyanın uzantısı alınır ve izin verilen dosya türleriyle (jpg
, jpeg
, png
, pdf
) karşılaştırılır.- Hata ve Boyut Kontrolleri: Dosyanın boyutu ve yükleme sırasında bir hata olup olmadığı kontrol edilir.
- Dosyanın Yeniden Adlandırılması: Benzersiz dosya adları kullanmak için `uniqid()` fonksiyonu kullanılarak bir isim oluşturulur.
- Dosyanın Taşınması:
move_uploaded_file()
fonksiyonu, dosyayı geçici klasörden hedef klasöre taşır.5. Yüklenen Dosyaların Saklanacağı Klasörü Oluşturma
Yüklenen dosyaları saklamak için bir
uploads
klasörü oluşturmalısınız. Bu klasörün sunucu üzerinde yazma izni olduğundan emin olun.mkdir uploads chmod 755 uploads
6. Güvenlik Önlemleri
Dosya yükleme işlemi güvenlik açıklarına yol açabilir. Aşağıdaki önlemleri almanız gerekir:
- Dosya Türü Kısıtlamaları: Yalnızca belirli türde dosyaların yüklenmesine izin verin (örn. resimler veya belgeler).
- Dosya Boyutu Sınırı: Büyük dosyaların yüklenmesini önlemek için maksimum boyut sınırı koyun.
- Dosya Adı Manipülasyonu: Dosya adlarının kullanıcı tarafından değiştirilmemesi için benzersiz isimler oluşturun.
- Sunucu Yanıtları: Herhangi bir hata durumunda kullanıcıya net hata mesajları verin, ancak sistem hakkında fazla bilgi sunmamaya dikkat edin.
Sonuç
Bu makalede, PHP ile dosya yükleme işleminin nasıl yapılacağını adım adım açıkladık. HTML formu oluşturarak dosya gönderme işlemi başlattık ve PHP ile dosya bilgilerini işleyerek yüklenen dosyayı sunucuda sakladık. Ayrıca, güvenlik önlemlerine dikkat etmenin öneminden bahsettik. Bu yöntemleri kullanarak kullanıcı dostu ve güvenli dosya yükleme işlemleri oluşturabilirsiniz.