Bir yazılım projesi geliştirilirken local sunucu üzerinde çalışıldığından, production sunucuya taşındığında bazı ayarların bu ortama göre yeniden yapılandırılması gerekir. Örneğin localhost üzerindeki veritabanı, eposta, hata gösterimi gibi ayarlar, production sunucuya uygun olacak şekilde değiştirilir. Ayrıca production öncesi bir test sunucusu üzerinde de yazılım test ediliyorsa, aynı ayarların bu ortam için de tekrar yapılandırılması gerekir.

Geliştirmenin her aşamasında bu ayarların sürekli değiştirilmesi vakit kaybına yol açacaktır. Bunun için her üç ortama ait ayarların yazılımımızda tutulması ve bulunulan ortama göre uygun olanların kullanılması hayatımızı kolaylaştıracak diyebiliriz.

Codeigniter dökümantasyonunda anlatıldığı şekilde ortamlara özel ayarların nasıl yapıldığına bakalım;

- /application/config/ dizini içerisinde, çalışacağımız ortamların isimlerini taşıyan dizinler oluşturuyoruz. Örneğin development, testing ve production olmak üzere 3 farklı ortamda çalışacağız.

- Çalışma ortamlarına göre özel ayarlar içeren dosyaların birer kopyasını, oluşturduğumuz dizinlerin içerisine yapıştırıyoruz.

- Kopyaladığımız dosyalarda çalışma ortamına ait ayarlamaları yapıyoruz.

Bu adımlardan sonra Codeigniter'ın, çalıştığı ortama göre gerekli ayarları otomatikman tespit etmesi ve kullanması için index.php dosyasında bazı değişiklikler yapmamız gerekiyor.

Öncelikle çalıştığımız ortamı tespit etmek için aşağıdaki kodu yorum satırlarından sonraki ilk sıraya ekliyoruz;

$localServers  = array('localhost');
$isLocal   = in_array($_SERVER['SERVER_NAME'], $localServers);

if($isLocal) {
    $env = 'development';
} else {
    // url adresinden test ortamını kontrol ediyoruz
    preg_match('#/test#', $_SERVER['REQUEST_URI'], $isTesting);

    $env = $isTesting ? 'testing' : 'production';
}

Burada önce sistemimizin local bir sunucuda mı çalıştığını sorguladık. Eğer local sunucunuz üzerinde bir virtual host tanımlamışsanız, $localServers dizisine eleman olarak url adresini girmeniz gerekir. Daha sonra test sunucusu için buna benzer bir kontrol yapıyoruz. Test sunucusunun URL 'inde "test" kelimesi geçiyorsa ortamımızı test sunucusu olarak belirlemiş olduk. Son olarak da tüm bu kontrollere takılmadan geçilmişse, production sunucu olduğunu anlıyoruz.

Çalıştığımız ortamı tespit edip $env değişkenine atadıktan sonra, yine index.php dosyasındaki ENVIRONMENT sabitine değer olarak veriyoruz;

define('ENVIRONMENT', $env);

Görüldüğü gibi çalışma ortamlarımızı ayırmış olduk. Bu sayede sistemimiz bulunduğu ortamı algılayarak buna uygun ayarları dikkate alacaktır.

Örneğin base_url değişkenimizi her üç ortama uygun şekilde ayarlamak için aşağıdaki gibi bir kullanım yeterli olacaktır;

/application/config/development/config.php için:

$config['base_url'] = 'http://localhost/proje';

/application/config/testing/config.php için:

$config['base_url'] = 'http://test.proje.com';

/application/config/production/config.php için:

$config['base_url'] = 'http://proje.com';

ÖNEMLİ: Codeigniter frameworkü, config dosyalarına bakarken öncelikle /application/config dizini içerisinde bulunanları dikkate alır. Daha sonra eğer varsa çalışma ortamlarına ait dizinlere bakar. Buna göre, ilgili ortam dizininde sadece ortamlara özel ayarların yapıldığı dosyaların kopyalarının oluşturulması yeterli olacaktır.