PHP ile Dosya Upload Uygulaması

bazen yazdığımız scriptlerde server'a yani sunucuya dosya yüklememiz gerekir.. örneğin bir haber scripti yazıyorsak o habere ait resimleri sunucuya yükleyip resimlerin yollarını database'e kaydettikten sonra onları o haber gösterildiğinde gösterebiliriz.. yakında basit bir resim galerisinin nasıl yazılacağını anlatan bir makale yazıcam zaten.. neyse, bugünkü konumuz sadece upload etmek olacak hadi başlayalım..

ilk olarak yazacağımız kodun tamamını vereceğim sonra satır satır açıklayacağım..

PHP:
  1. <?php
  2.  
  3.   if(isset($_POST['gonder'])) {
  4.  
  5. $dosyayolu = "upload/";
  6.  
  7. $dosyayolu = $dosyayolu . basename( $_FILES['resim']['name']);
  8.  
  9. if(is_uploaded_file($_FILES['resim']['tmp_name']))
  10. {
  11. if(!move_uploaded_file($_FILES['imgfile']['tmp_name'], $uploadpath))
  12. {
  13.  
  14.      die('Dosya Taşınamadı..');
  15. }
  16.     echo 'Dosya Başarı İle Yüklendi..';
  17.     echo 'Detaylar<br />';
  18.     echo"Dosya Tipi: ". $_FILES['resim']['type'] ."";
  19.     echo"Büyüklüğü (Bytes): ". $_FILES['resim']['size'] ."";
  20.     echo"Dosya Adı: ". $_FILES['resim']['name'] ."";
  21. }
  22. else
  23. {
  24.     die('Dosya Yüklenemedi');
  25. }
  26.  
  27.  
  28. ?>
  29.           <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
  30.                   Upload Image: &emsp;
  31.           <input type="file" name="resim" />
  32.           <input type="submit" name='gonder' value="Yükle" />

ilk satırla başlayalım bu satır ile aşağıdaki form'un post edilip edilmediğini, yani yükle tuşuna basılıp basılmadığını sorguluyoruz.. yani klasik bir if sorgusu başlangıcı..

PHP:
  1. if(isset($_POST['gonder])) {

aşağıdaki kod ile de dosyanın sunucu üzerinde hangi klasöre veya nereye yükleneceğini belirteceğimiz $dosyayolu adlı bir değişken oluşturuyoruz. Ancak burda dikkatinizi çekmek istediğim birşey var eğer scriptin çalıştığı sunucu üzerinde değişkene verdiğiniz klasör adını içeren bir klasör bulunmazsa veya bu klasör var ancak chmod ayarları 777 yapılmamışsa scriptiniz hata verecektir.

PHP:
  1. $dosyayolu = "upload/";
  2. $dosyayolu = $dosyayolu . basename($_FILES['resim']['name'])

yukarıdaki koda dair bir miktar daha açıklama yapmam gerekiriyor sanırım.. yukarıdaki kodda gördüğünüz $_FILES['resim']['name']; isimli kısım bize dosyanın adını verir. bu PHP içinde gelen FILES isimli süperglobal değişkene ait olan bir koddur.. ve bu FILES dizisinin toplam 5 tane özelliği var şimdi bunları inceliyelim
$_FILES['uploadalani']['name'] : Dosya Adını Verir
$_FILES['uploadalani']['tmp_name'] : PHP dosyaları upload ederken temp dizinini kullanır yani dosyaları önce sunucuda temp yani geçici dosyalar kısmına yükler sonra işi bitincede bırakır gider :D bu özelliği kullanarak ta dosya'nın temp'teki adına ulaşıyoruz.
$_FILES['uploadalani']['size'] : Bu özellik ise dosyanın boyutunu byte cinsinden verir, 1-2 if sınaması ile bununda Mb cinsine çevirebilirsiniz..
$_FILES['uploadalani']['type'] : Dosyanın mimetype yani tam olarak Türkçe karşılığı olmasada tipini verir.. image/jpg, text/plain gibi..

aşağıdaki kod ile de dosyanın temp dizinine upload edilip edilmediğini kontrol ediyoruz.. is_uploaded_file() fonksiyonu bu işe yarıyor... biz

PHP:
  1. if(is_uploaded_file($_FILES['resim']['tmp_name']))
  2. {

bu kod ilede dosyayı taşıyoruz.. fonksiyonu if içinde kullanarak eğer dosya taşınırsa fonksiyon TRUE yani DOĞRU değer döndüreceğinden dolayı if sorgumuzda doğru oluyor, tabi başına koyduğumuz ! de eğer fonksiyon FALSE yani YANLIŞ değer döndürürse hata mesajı vermemizi sağlıyor..

PHP:
  1. if(!move_uploaded_file($_FILES['resim']['tmp_name']))
  2. {

bu ise eğer dosya kazasız belasız yüklenirse çıkartacağımız mesaj ve altına koyacağımız bilgiler..

PHP:
  1. echo 'Dosya Başarı İle Yüklendi..';
  2.     echo 'Detaylar<br />';
  3.     echo"Dosya Tipi: ". $_FILES['resim']['type'] ."";
  4.     echo"Büyüklüğü (Bytes): ". $_FILES['resim']['size'] ."";
  5.     echo"Dosya Adı: ". $_FILES['resim']['name'] ."";

bu aşağıdakide HTMl Upload formumuz normal bir formdan farkı ise

PLAIN TEXT
HTML:
  1. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
  2.                   Resim yükle: &emsp;
  3.           <input type="file" name="resim" />
  4.           <input type="submit" name='gonder' value="Yükle" />

evet basitçe dosya upload uygulaması böyle ancak daha çok ama çok geliştirilebilir ve eğer kullanacaksanız buradaki kodları copy/paste yaparak sitenizde kullanmanızı tavsiye etmem.. kullanıcaların kullanacağı formlarda bu upload alanından gelen dosyanın türü,boyu gibi bir çok özellik kontrol edilmelidir.. hotscripts.com adresinde bu konuyla ilgili çok güzel classlar veya kodlar bulabilirsiniz.. takıldığınız veya anlamadığınız yerleri yorum yazarak, yada iletişim formundan bildirebilrsiniz.. hadi PHP ile kalın, Esen kalın..
Her nerede yaşıyor ve yaşatılıyorsanız :D

Twitter

Bu yazı 14 Aralık 2006, 21:25 tarihinde Makaleler, PHP, Web Geliştirme kategorisi altında yayınlandı. Bu yazıya yapılacak yorumlardan haberdar olmak için RSS 2.0 beslemesini kullanabilirsiniz. Yorum yapabilirsiniz, veya kendi sitenizden geri izleme yapabilirsiniz.

Hiç yorum yapılmamış. İlk yorumu sen yapabilirsin?

Yorum Yapın