Başkalarının bilgisayarında olan dosyaları kendi sunucumuza göndereceğimiz bu çalışmada güvenlik için biraz dikkatli ve tedbirli olmamız gerekiyor.

Eğer hiç bir koşul uygulamadan saf bir upload uygulaması yapacak olursak, isteyen herkes sitemize istediği dosyayı ve yazılımı gönderebilir, kendi kodlarını atıp sitemizi ele geçirebilir.

Bunun için dosyaları enine boyuna kontrol edip onayladıktan sonra sitemize göndereceğiz. Öncelikle dosya uzantısına, dosya boyutuna ve dosyanın tipine bakacağız. Tipini ya da boyunu beğenmezsek almayacağız.

Php Upload uygulamalarında kullanıcılara dosya yükleme imkanı sunmak için aşağıdaki adımları izleyin.

index.php dosyası


<form enctype="multipart/form-data" action="upload.php" method="POST">
Dosya: <input name="dosya" type="file" />
<input type="submit" value="Yükle" />
</form>


upload.php dosyası

<?php $hedef = "dosyalar/"; $hedef = $hedef . basename( $_FILES['dosya']['name']) ; // Yüklenen dosya boyutu 20 KB'yi geçmesin if($_FILES["dosya"]["size"] > 20000)
{
    echo "Dosya boyutu 20 KB'yi aşamaz";
    return;
}
 
// İzin verilen dosya türleri
if(!($_FILES["dosya"]["type"] =="image/gif" || $_FILES["dosya"]["type"] =="image/png"))
{
echo "Yalnızca gif veya png dosyası yükleyebilirsiniz";
return;
}
 
if(move_uploaded_file($_FILES['dosya']['tmp_name'], $hedef))
{
echo "Dosya yükleme tamamlandı";
}
else {
echo "Hata oluştu.";
}
?>

PHP’ye gönderilen dosyaları kontrol edip yüklemek

Şimdi gelelim dosyaların gönderileceği uygulamamıza, yani bizim örnekte gonder.php olarak adlandırdığımız sayfamıza.

İlk olarak sayfamıza bir dosya gönderilmiş mi diye kontrol edeceğiz. Eğer sayfaya direkt girmeye çalışılırsa hiç bir şey yapmamamız gerekiyor. Sonrasında $_FILES global değişkenini kullanarak bize gönderilen dosyanın boyutuna, tipine ve uzantılarına bakacağız.

Yine isset fonksiyonunu kullanarak bir dosya gönderilmiş mi diye bakacağız. Eğer gönderilmiş ise $_FILES global dizininde gönderilen dosya elementinin adında bir dizin oluşmuş olur. Yani form elementininin name parametresine yazdığımız isimimi kullanacağız. Biz formumuzu yaparken bu değere “dosya” yazmıştık.

if(isset($_FILES['dosya'])) {
   echo 'Dosya gönderilmiş';
} else {
   echo 'Lütfen bir dosya gönderin';
}