Anasayfa / Blog / PHP Dersleri / Php Değişkenler / PHP Dosya Upload İşlemi
Bu dersimizde post metoduyla formdan dosya upload etmeyi ele alacağız. Dosya upload etmek için kullanacağımız bir başka süper global değişkenimiz olan $_FILES değişkenimizi kullanacağız. Dosya yüklemek için öncelikle bir form oluşturuyoruz. Formumuzun method kısmına POST özelliği veriyoruz. Aynı dosya üzerinde resim upload edeceğimiz için action kısmını boş bırakoyoruz ve forma enctype=”multipart/form-data” etiketini ekliyoruz. Ardından type özelliği “file” olan ve name özelliği “dosya” olan bir input ve bir de gönder butonu ekliyoruz:
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="dosya"/>
<input type="submit" value="Yükle" />
</form>
Yukarıdaki gibi HTML ile formumuzu oluşturduysak, gelelim asıl mesele olan dosya yükleme meselesine. Buradan sonraki kısmı PHP ile yapıyoruz.
Şimdi $_FILES süper global değişken içerisinde hangi bilgileri elde edebileceğimize bir gözatalım:
$_FILES['dosya']['name']
: Dosyanın bilgisayardaki adını döndürür.
$_FILES['dosya']['type'
] : Dosya mim tiplerini döndürür.
$_FILES['dosya']['size']
: Dosyanın byte cinsinden değerini döndürür.
$_FILES['dosya']['tmp_name']
: Yüklenen dosyanın sunucuda arabellekteki adı ve konumudur.
$_FILES['dosya']['error']
: Yükleme sırasında hata oluşursa, oluşan hatanın kodunu döndürür.
Şimdi dosyamızı nasıl yükleyeceğimize bakalım:
Dosyanın yüklenmesi ara bellekten kalıcı belleğe yüklenmesi için move_uploaded_file(); fonksiyonunu kullanacağız. Bu fonksiyon iki adet parametre alır ve true ya da false olmak üzere iki ayrı sonuç döndürür.
Birinci parametresi dosyanın arabellekteki diziniyle birlikte dosya adı , ikinci parametresi ise dosyanın kalıcı olarak saklanacağı dizinle birlikte dosya adıdır.
Şimdi kodlarımızı yazalım;
<?php
if($_FILES['dosya']){ // Eğer yüklenecek dosya varsa
if($_FILES['dosya']['error'] == 0){ // Eğer dosyayı ara belleğe almada hata yok ise
$yukle = '../ders/'.$_FILES['dosya']['name']; // Dizini ve dosya adını birleştirip yükle değişkenine atıyoruz
if(move_uploaded_file($_FILES['dosya']['tmp_name'], basename($yukle))){ // Eğer arabellekteki dosya istediğimiz dizine yüklendiyse
echo "dosya başarıyla yüklendi"; // Kullanıcıya dosyanın başarıyla yüklendiğini söyle.
}else{
echo "Dosya yüklenirken bir hata ile karşılaşıldı."; // Dosya ara bellekten kalıcı belleğe yüklenirken hata verdiyse
}
}else{
echo "Dosya yüklenirken bir hata ile karşılaşıldı."; // Dosya arabelleğe alınırken hata verdiyse
}
}
?>
$_FILES['dosya']['name']
kodu ile dosya adını ve uzantısını aldığımıza göre artık bu dosyanın uzantısını kontrol ederek yüklemeye izin verebiliriz. Bunun için phpinfo() fonksiyonunu kullanabiliriz.
Örnek:
<?php
/*
* Önce dosya bilgisini phpinfo() fonksiyonuna gönderelim
* ve sonuçları $ext dizisine aktaralım
*/
$ext = pathinfo($_FILE['dosya']['name']);
/*
* atdından $ext dizisinin extension indisini alıp $uzanti değişkenine aktaralım
*/
$uzanti = $ext['extension'];
if($uzanti == "zip"){ // Eğer $uzanti değişkenimizin deperi "zip" ise
echo "Dosya kabul edildi";
}else{ // $uzanti değişkenimizin değeri "zip" değilse
echo "Yalnızca zip uzantılı dosyalar kabul edilebilir";
}
?>
Görüldüğü gibi dosyamızın uzantı bilgisini aldık. Şimdi yükleme aşamasında nasıl kullanacağımızı bakalım.
Kodlarımız aşağıdaki gibi olacak;
<?php
if($_FILES['dosya']){ // Eğer yüklenecek dosya varsa
$ext = pathinfo($_FILE['dosya']['name']); // Dosya bilgilerini al
$uzanti = $ext['extension']; // uzantıyı $uzanti değişkenine aktar
if($uzanti == "zip"){ // Eğer $uzanti değişkenimizin deperi "zip" ise
if($_FILES['dosya']['error'] == 0){ // Eğer dosyayı ara belleğe almada hata yok ise
$yukle = '../ders/'.$_FILES['dosya']['name']; // Dizini ve dosya adını birleştirip yükle değişkenine atıyoruz
if(move_uploaded_file($_FILES['dosya']['tmp_name'], basename($yukle))){ // Eğer arabellekteki dosya istediğimiz dizine yüklendiyse
echo "dosya başarıyla yüklendi"; // Kullanıcıya dosyanın başarıyla yüklendiğini söyle.
}else{
echo "Dosya yüklenirken bir hata ile karşılaşıldı."; // Dosya ara bellekten kalıcı belleğe yüklenirken hata verdiyse
}
}else{
echo "Dosya yüklenirken bir hata ile karşılaşıldı."; // Dosya arabelleğe alınırken hata verdiyse
}
}else{
echo "Yalnızca zip uzantılı dosyalar kabul edilebilir";
}
}
?>
Çalışmalarımı beğendiyseniz iletişim bölümünden bana ulaşabilirsiniz. Daha fazla soru için info@mgunaydin.com adresini kullanın.