Pythontr

husonet | Tarih: 28.04.2015

Codeigniter 2.2.x’den 3.3’e Yükseltme

Php, Codeigniter frameworkunuzu 2.2.x den 3.3 e güncelleme haritası

Güncelleme yapmadan önce statik bir yerde bulunan index.php dosyasını kendi sitenizde çevrimdışı olarak değiştirmelisiniz.


Adım 1: CodeIgniter dosyalarını güncellemek

Sistem klasöründeki tüm dosyaları, dizinleri ve index.php dosyasını değiştirin. Eğer index.php dosyasında herhangi bir değişiklik yapılmışsa yenileme yapılması gerekecektir.


Adım 2: Sınıfların dosya isimlerini güncellemek

CodeIgniter 3.0 ile birlikte tüm sınıf dosyaları (libraries, drivers, controllers and models) içerisindeki sınıf isimleri büyük harf ile başlamalıdır.


Örneğin, library dosyasının içerisinde bulunan mylibrary.php varsa onu Mylibrary.php şeklinde değiştirmeniz gerekecektir.
application/libraries/Mylibrary.php


Sürücü kütüphaneleri içinde aynı durum geçerlidir. CodeIgniter’ın kendi kütüphaneleri ve core sınıfları üzerine yazdırılır ve genişletilir.


application/libraries/MY_email.php application/core/MY_log.php
üstteki dosyalar aşağıdaki gibi değiştirilmelidir:
application/libraries/MY_Email.php application/core/MY_Log.php


Controllers:

application/controllers/welcome.php -> application/controllers/Welcome.php


Models:

application/models/misc_model.php -> application/models/Misc_model.php
Lütfen bu durumun sadece sınıflarda uygulandığını dizinleri, yapılandırma dosyalarını, views, helpers, hooks ve başka herhangi birşeyi etkilemediğini unutmayalım.


Adım 3: Config/mimes.php değiştirmek

Bu config dosyası daha fazla kullanıcı içermek için güncellendi. Lütfen onu _application/config/mimes.php e kopyalayınız.


{reklam}
Adım 4: Config/autoload.php’den $autoload[‘core’] ‘i kaldırmak

$autoload['core'] config dizisi kullanmak CodeIgniter 1.4.1 itibariyle onaylanmamakta ve şimdi ise kaldırılmış durumdadır. $autoload['libraries'] yerine tüm girdileri taşıyabilirsiniz.


Adım 5: Uzantıları veya Log sınıfını üzerine yazarak taşımak

Log sınıfı “core ” sınıfı olarak kabul edilirdi. Şimdiyse system/core/ directory dizininde yer almaktadır. Aşağıda olduğı gibi Log sınıflarını application/core altına toplamak gerekmektedir.


application/libraries/Log.php -> application/core/Log.php
application/libraries/MY_Log.php -> application/core/MY_Log.php
Adım 6: Session Library kullanımını güncellemek

CodeIgniter 3 ile birlikte Session library tamamen yeniden yazıldı ve artık yeni özellikler geliyor. Library, cookies’ler yerine ayrı depolama sürücüleri kullanır. Bazı yapılandırma ayarları değiştirilip yerine yenisi getirilmiştir. Aşağıdayapılması gereken değişikliklerin kısa bir listesi bulunmaktadır.


  • $config['sess_driver']
  • $config['sess_save_path']
  • $config['sess_use_database']
  • $config['sess_table_name']

ci_sessions  tablonuzu güncelleyiniz.

Tablo yapısı biraz değişti artık daha spesifik oldu.


  • session_id alanının ismi id olarak değiştirilir
  • user_agent alanı bırakılır
  • user_data alanının ismi data ile değiştirilir ve şimdi MySQL altında BLOB tipindedir.
  • last_activity alanının ismi timestampolarka değiştirilir.

Sadece MySQL ve PostgreSQL destekleniyor. Diğer veritabanlarıyla hala çalışabilir, ancak danışmanlık kilitleme özellikleri eksikliği nedeniyle, onlar eşzamanlı istekleri için güvensiz ve yerine başka bir sürücüyü kullanmayı düşünmelisiniz.


  • $config['sess_match_useragent'] çıkar
  • $config['sess_encrypt_cookie'] çıkar
  • $config['sess_encrypt_cookie'] çıkar

Adım 7: Config/database.php güncellemek

3.0.0 ile config/database.php içinde $query_builderda $active_record değişkeninin yeniden adlandırılması gerekecektir.


  • $active_group = 'default';
  • // $active_record = TRUE;
  • $query_builder = TRUE;

Adım 8: Hata şablonlarının yerini değiştirmek

CodeIgniter 3.0’da hata şablonları Application/views altına toplanmaktadır Ayrıca, html aksine CLI hata şablonları için destek eklendi.


_application/views/errors/html* ‘den dizini _application/views/errors/cli* olarak yenilenir.


Adım 9: Config/routes.php dosyalarını güncellemek
Any içeren yönlendirmeler

(:any) parça sadece karakter ise eşleştirir.


CodeIgniter 3 ile

(.+) herşey eşleşir
(:any) '/' dışında her karakter ile eşleşir


Directories and ‘default_controller’, ‘404_override

$route['default_controller'] ve $route['404_override']’ ayarlarında sadece bir controler ismi kabul edilmez. 3 ile gelen değişiklerden biri de default_controller’ ve ‘404_override’ directory aracılığıyla uygulanmaz. Bunu açıklamak için aşağıdaki örneği ele alalım


$route['default_controller'] = 'main';

Eğer bir uygulama application/controllers/admin/directory dizininde ve ziyaret dilen sayfa http://example.com/admin/? İse ne olacak? CodeIgniter 3 içerisinde router ‘main’ controlerının altındaki admin/ directory dizinine bakıcak eğer bulamazsa sürüm 2.x’de olduğu gibi application/controllers/ dizini çare olacaktır. Aynı kural '404_override' ayarı için de geçerlidir..


Adım 10: Bir çok fonksiyonda eksik öğeler üzerinden False yerine Null dönmesi

Bir çok yöntem ve fonksiyonlar gerekli itemlerıyoksa eğer false yerine null döndürür.


Ortak Fonksiyonlar
config_item()
Config Sınıfı
config->item()
config->slash_item()
Input Sınıfı
input->get()
input->post()
input->get_post()
input->cookie()
input->server()
input->input_stream()
input->get_request_header()
Session Sınıfı
session->userdata()
session->flashdata()
URI Sınıfı
uri->segment()
uri->rsegment()
Array Helper
element()
elements()
Adım 11: XSS filtreleme Kullanımı

CodeIgniter birçok fonksiyonları talep üzerine XSS filtreleme özelliğini kullanmanıza izin verir. Boolean parametrelerin default değeri False olarak kullanılırdı fakat şimdi Null olarak değiştirilmiş durumda ve $config['global_xss_filtering'] değeri tarafından belirlenmektedir.


$xss_filter parametresi için manuel bir boolean değer kullanılıyorsa veya $config['global_xss_filtering'] her zaman false olarak ayarlanıyorsa o zaman bu değişiklik sizi ilgilendirmemektedir.


Aşağıdaki fonksiyonların kullanımını gözden geçiriniz:


Input Library
input->get()
input->post()
input->get_post()
input->cookie()
input->server()
input->input_stream()
Cookie Helper
get_cookie()

küresel XSS filtreleme açıldığında otomatik olarak yazılan bir başka değişiklikler $ _GET, $ _POST, $ _COOKIE ve $ _SERVER’dir.


Adım 12: Uri’ler ile potansiyel XSS konuları için kontrol

Uri kütüphanesi Uri segmenti içeriside bulunan belli karakterler kümesinin dönüştürülmesinde kullanılır. $config['permitted_uri_chars'] ayarı bazı otomatik XSS koruması sağlamayı amaçlıyordu fakat bunun sorunlu olduğu anlaşılmış ve Codeıgneter 3 içerisinden çıkarılmıştır.


Eğer bu özelliği kullanmaya devam etmek isterseniz $this->security->xss_clean()ile güncelleme yapılması gerekmektedir.


Adım 13: ‘xss_clean’ form doğrulama kurallarının kullanımı için kontrol


Genelde bilinmeyen kurallar hakkında XSS temizleme veri girişi aksine sadece çıkış için uygulanmalıdır. Otomatik ve küresel XSS temizleme ile kendikendimize hata yapıyorduk şimdi ise form doğrulama listesinden ‘xss_clean’ çıkarılıyor.


Eğer bu kuralı uygulamaya ihtiyaç duyarsanız ‘xss_clean’ içeren Security Helper yüklemeniz gerekmektedir.


Adım 14: Giriş sınıflarının get_post() metodunun kullanımını güncellemek

Giriş sınıf metodu get_post() ilk post verileri içinde arama yapıyordu daha sonra get verilerine geçilirdi. Bu metod Post da arama yapıldıktan sonra get içinde arama yapmaya yönelik çalışmaktadır.


post_get() metodu eklenmiştir bu metot ile get den sonra post arama yapılmaktadır


Adım 15: Directory Helper’ın directory_map() fonksiyonun kullanımını güncellemek

Elde edilen dizide, dizinler dizin ayraçları ile ayrılırlar ( genellikle ‘/’ ).


Adım 16: Database Forge’ ın drop_table() metodunun kullanımını güncellemek
// şimdi sadece DROP TABLE `table_name` üretmektedir
$this->dbforge->drop_table('table_name');
// DROP TABLE IF EXISTS `table_name` üretmektedir
$this->dbforge->drop_table('table_name', TRUE);

Not: bu verilen örnek Mysql sözdiziminde kullanılmaktadır. Ancak ODBC hariç tüm sürücüler arasında çalışmaktadır.


Adım 17: Birden fazla e-posta ile e-posta kütüphanelerinin kullanımını değiştirmek

E-posta Kütüphanesi başarıyla e-posta gönderdikten sonra otomatik olarak ayar parametreleri silinecektir. Bu durumu geçersiz kılmak için send() metodu içerisinde ilk parametre False olarak ayarlanır.


if ($this->email->send(FALSE))
{
// Parametreler silinmeyecek
}

Adım 18: Form_validation dil bağlantılarınızı güncellemek


Form validation kütüphanelerinin dil dosyaları ve hata mesajları formatına geliştirme yapılmıştır.


Çarpışmalardan kaçınabilmek için dil kütüphalerinde bulunan ‘rule’ önüne form_validation_ ön eki eklenmiştir:


// Eski hali
$lang['rule'] = ...
// Yeni hali
$lang['form_validation_rule'] = ...

Hata mesajları formatı parametre isimleri kullanılarak değiştirildi:


// Eski
'The %s field does not match the %s field.'
// Yeni
'The {field} field does not match the {param} field.'

Not: Eski formatta hala çalışmaktadır. Fakat Codeigniter 3.1 + ile ön eksiz bağlantılara karşı koymak için bunun çıkarılması istendiği için kullanmak gerekir. Bu nedenle kullanılması teşvik edilmelidir.


Adım 19: Önerilmeyen işlevlerin kullanımını kaldırmak

$autoload['core'] yapılandırma ayarlarına ek olarak CodeIgniter 3.0.0 içinden çıkarılmış diğer işlevler bulunmaktadır.


Adım 20 : Text helper highlight_phrase() kullanımını güncellemek

Text Helper function highlight_phrase() tarafından varsayılan HTML tag kullanımı <strong>, yeni HTML5 tag’ı <mark> olarak değiştirildi.


mark {
background: #ff0;
color: #000;
};