Cuma, 9 Nisan 2010

Genişletilmiş FTP Kütüphanesi - Config Dosyası Oluşturma

 

Büyük dosyalarla çalışmamız gerektiğinde uygulamanızın bulunduğu sunucuya sahip değilseniz, paylaşımlı sunucu kullanıyorsanız, dosya yükleme ve indirme sırasında genellikle sorun yaşarsınız. Dosyanızı yüklemeye çalışırken sunucu hafızasının ya da çalışma süresinin dolduğu gerekçesiyle uygulamanız durabilir. Ya da dosyanız indirilmek istendiğinde birden uygulamanız uçabilir. Bunun dışında kullanıcılarınız tarafından yüklenen dosyalar genellikle herkese açık dizinlere yapıldığı için güvenlik sorunu her zaman vardır.

Bu sorunları ortadan kaldırmanın yollarından biri CodeIgniter FTP kütüphanesini kullanmaktır. CodeIgniter FTP kütüphanesi basit ve kullanışlı bir kütüphanedir. Ancak ihtiyaçlara göre yeniden düzenlenmesi ve genişletilmesi gereklidir. Genişletilmiş FTP kütüphanesini, anlam karışıklığı önlemek amacıyla bir kaç yazıda ele alacağım.

Config Dosyası Hazırlamak

CodeIgniter, FTP erişim bilgilerini bir dosyada tutmak yerine her kullanımda controller dosyasının içinde tanımlama yolunu seçmiştir. Bu nedenle işe FTP kütüphanesinin erişim bilgilerini application/config dizini altındaki ftp.php isimli dosyaya yazdırarak ve oradan okutarak başlayalım. Application/config dizini altına ftp.php isimli bir dosya açalım. İçeriğini şöyle yazalım:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| FTP - config dosyasi
| -------------------------------------------------------------------
|
*/

$active_group = "default";

$ftp['default']['hostname'] = 'ftp.siteadresi.com';
$ftp['default']['username'] = 'ftp_kullanici_adi';
$ftp['default']['password'] = 'ftp_sifresi';
$ftp['default']['port']     = 21;
$ftp['default']['passive']  = FALSE;
$ftp['default']['debug']    = TRUE;

Bu dosyada birden fazla active_group tanımlayarak (application/config/database.php dosyasındaki gibi) farklı ftp sitelerine giriş bilgilerini de tutmanıza olanak verecek şekilde bir dizin oluşturulmuştur. Daha sonra FTP kütüphanemizi genişleteceğimiz için application/libraries dizini altına MY_Ftp.php isimli dosyamızı oluşturalım. Öncelikle bu dosya içine connnect() fonksiyonunu düzenleyerek config dosyamızdaki giriş bilgilerine erişelim. Bu kütüphaneyi yükledikten sonra seçtiğimiz konfigürasyon ile controller dosyamızdan çağırmak için $this->ftp->connect('default'); satırını kullanıyoruz.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_FTP extends CI_FTP {

 var $ssl_mode = FALSE;
 
 /**
  * Constructor - Sets Preferences
  *
  * The constructor can be passed an array of config values
  */ 
 function MY_FTP($config = array())
 {  
  if (count($config) > 0)
  {
   $this->initialize($config);
  } 

  log_message('debug', "FTP Class Initialized");
 }
 // --------------------------------------------------------------------

 /**
  * Initialize preferences
  *
  * @access public
  * @param array
  * @return void
  */
 function initialize($config = array())
 {
  if(is_array($config))
  {
   foreach ($config as $key => $val)
   {
    if (isset($this->$key))
    {
     $this->$key = $val;
    }
   }
  }
  // Prep the hostname
  $this->hostname = preg_replace('|.+?://|', '', $this->hostname);
 }
 
 // --------------------------------------------------------------------

 /**
  * FTP Connect
  *
  * @access public
  * @param array  the connection values
  * @return bool
  */
 function connect($config = array())
 {
 
  // Eger config değeri text ise config.php dosyasına git
  if (is_string($config))
  {
   include(APPPATH.'config/ftp'.EXT);
   
   $group = ($config == '') ? $active_group : $config;
   
   if ( ! isset($ftp[$group]) || !is_array($ftp[$group]))
   {
    show_error('You have specified an invalid ftp connection group: '.$group);
   }
   else
   {
    $this->initialize($ftp[$group]);
   }
  }
  
  if (count($config) > 0)
  {
   $this->initialize($config);
  }

  if (FALSE === ($this->conn_id = @ftp_connect($this->hostname, $this->port)))
  {
   if ($this->debug == TRUE)
   {
    $this->_error('ftp_unable_to_connect');
   }
   return FALSE;
  }

  if ( ! $this->_login())
  {
   if ($this->debug == TRUE)
   {
    $this->_error('ftp_unable_to_login');
   }
   return FALSE;
  }

  // Set passive mode if needed
  if ($this->passive == TRUE)
  {
   ftp_pasv($this->conn_id, TRUE);
  }

  return TRUE;
 }

 
}
// END MY_FTP Class

Böylece, CodeIgniter Email kütüphanesinde olduğu gibi sunucu bilgilerini application/config dizini altına alarak, tek merkezden değiştirme ve birden fazla sunucuya ftp bilgileriyle bağlanma imkanı bulduk. Genişletilmiş FTP kütüphanesi hakkında yazmaya devam edeceğim.

Yorumlar

Henüz yorum gelmemiş.

Yorum Ekle