Pazartesi, 16 Ağustos 2010

Callback ile Dosya Kontrolü

 

CodeIgniter ile dosya yükleme (upload) sırasında yapılması gerekli kontrollerden biri de, kullanıcının istediğimiz türdeki dosyayı seçip seçmediğinin kontrolüdür. Bu işlem için pek çok farklı yaklaşım kullanabilirsiniz. Ben bu yazımda bir callback fonksiyonu ile daha işin başında nasıl kontrol edeceğimizi anlatacağım.

Önce bir view dosyası oluşturalım. Application/views dizini altına fup_form_view.php ismiyle kaydettiğimiz bu dosyanın içeriği aşağıdadır. Form çalıştığı zaman fupload isimli controller`ın run metodunu çalıştırıyor ve userfile isimli dosya değişkenimizi yüklüyor. Burada CodeIgniter`ın form_helper isimli helper dosyasını da multipart fonksiyonu ile birlikte kullandığımıza dikkat edelim.

<?php  echo form_open_multipart('/fupload/run',array('id' => 'myform'));?> 

  
  <div class="form"> 
    <span>File upload :</span>
     <input type="file" name="userfile" size="40">
   
    <p><input type="submit" name="add"  class="submitbutton" value="GONDER"></p>

  </div>
<?php echo form_close() ?>  

Controller dosyamız ise application/controllers dizini altına fupload.php ismi ile kayıtlıdır. Önce standart kısımları yazalım :

<?php

class Fupload extends Controller
{

 function Fupload()
 {
  parent::Controller();
  $this->load->library('form_validation');  
  $this->load->helper('form');  

 }

 function index()
 {
 
  $this->load->view('fup_form_view');
  
 }
 
 function run()
 {
   $this->form_validation->set_rules("userfile", "file", "callback__check_file");

     if ($this->form_validation->run() === FALSE)
     {

    $this->session->set_flashdata('msg', $this->form_validation->_error_array);
    redirect('fupload');     

   } 
   else 
   {
    echo "<div class='success'>Form Success!</div>";           
    
   }
 }
 

Controller dosyamızda form_validation kütüphanesi ile form helper dosyasını yapı bölümünde yüklüyoruz. Daha sonrası bildiğimiz işlemler başlıyor. "Run" metodu çalıştırıldığında ekrana gelen form doğrulama satırında bir _check_file isimli callback fonksiyonu yazdığımızı söylüyoruz. Bu fonksiyonda kullanıcının çağırdığı dosyanın jpg olup olmadığını kontrol edeceğiz. Dosya jpg formatında değilse, _check_file isimli callback fonksiyonu ile programımızı kesiyoruz. Eğer jpg ise dosya yükleme işlemlerine geçiyoruz (ki karmaşıklığı önlemek adına o kısmı burada anlatmadım).

_check_file isimli callback fonksiyonu içeriği şöyledir:

 function _check_file()
 {
  if($_FILES['userfile']['type'] != 'image/jpeg')
  {
   $this->form_validation->set_message('_check_file', 'Bir IMAGE dosyasi secmelisiniz!');
   return FALSE;
  }
 } 

Yukarıda yazdığım _check_file isimli callback fonksiyonunda $_FILES isimli superglobal değişkeninde, view dosyamızdaki formda userfile ismi ile yüklediğimiz değişken tipinin jpg olup olmadığını kontrol ettiriyoruz. Eğer değilse fonksiyonumuz 'Bir IMAGE dosyasi secmelisiniz!' cümlesi ile hata mesajını ekrana verecektir.

Yine benzer şekilde, dosya tipi yerine sadece dosya seçildi mi seçilmedi mi? diye kontrol ettirmek isterseniz fonksiyonu şöyle değiştirmeniz yeterlidir:

 function _check_file()
 {
  if(!$_FILES['userfile']['tmp_name'])
  {
   $this->form_validation->set_message('_check_file', 'Bir dosya secmelisiniz!');
   return FALSE;
  }
 } 

Yorumlar

Evet işte bu çok işime yaradı. Çok teşekkür ederim yazınız için.

Rica ederim. İşinize yaradıysa ne mutlu...

Yorum Ekle