Volite web dizajn?

Zašto ne podijelite svoje znanje s cijelim svijetom? Svatko može pisati za Kroativ i na taj način se promovirati.

Pomoć potrebitima

http://www.hck.hr

Hrvatski Crveni križ

u službi humanosti od 1878.

Codeigniter konfiguracija (3. dio)

Autor/ica Primjeri

Autor web stranice primjeri.com na kojoj možete pronaći odgovore na česta pitanja iz svijeta web dizajna te programiranja.

Oglas

Nastavljamo u revijalno-detaljnom tonu ;)

Dakle da konačno malo prokomentiramo našu aplikacijsku mapu :D koja izgleda ovako:

 

Da prokomentiramo:

  • cache – ako nešto spremamo u “cache” onda je to pohranjeno u ovom direktoriju
  • config – ovdje se nalazi sve vezano za konfiguraciju
  • controllers – ovdje se nalaze svi kontroleri. Kod nas to neće biti slučaj jer ćemo koristiti HMVC iako možete paralelno koristiti i ovu mapu :D
  • core – ako hoćemo override-ati system onda to možemo u ovom direktoriju
  • errors – prikazi grešaka definirani su u ovom direktoriju
  • helpers – direktorij za često korištene pomoćne funkcije
  • hooks – ovdje možemo izvršavati određene radnje u određenom trenutku prilikom učitavanja frameworka (npr. netom prije kontrolera i sl.)
  • language – ovdje se nalaze prijevodi
  • libraries – ovdje možete kreirati vaše klase
  • logs – različiti logovi (debug, error)
  • models – ovdje spremamo naše modele
  • modules – ovdje spremamo naše module
  • third_party – ovdje idu različite third party komponente i sl.
  • views – ovdje spremamo naše HTML datoteke (one su zapravo *.php datoteke ali sadržaj je HTML)

Izvan aplikacijske mape nalazi se još i naš index.php (u public_html direktoriju) a nalaziti će se i naše css, js, flash, slike i slične datoteke.

index.php

Za početak ako me nešto nervira to je onda trenutak kada svoju aplikaciju moram preseliti sa lokalnog/development/razvojnog računala na server a tamo pak opet imam barem neku testnu subdomenu i sam produkcijski server.

Vjerojatno znate već što vas čeka :D

Promjena baze, korisnika, lozinke, putanja do sistema, aplikacije, eventualno mape u koju korisnici rade upload i ostale putanje svaki puta kada selite aplikaciju. Nema više!

U nastavku vam nudim (jedno od mogućih) rješenje (u većini slučajeva :D) za to.
Dakle jednom ispišete sve lokacija i to je to samo selite aplikaciju kako god bez brige (naravno nakom što ste sve testirali) :D

Dakle radimo fleksibilno a cijelu stvar ćemo bazirati na (pod)domeni iako može i po IP-u ili čega se već sve sjetite).

Pa krenimo od naše index.php datoteke

Definirat ćemo par pomoćnih konstanti:

BASE_URL i ENVIRONMENTH_PATH

SYSTEM_PATH, APPLICATION_PATH i UPLOADS

BASE_URL konstanta

U konstanti BASE_URL definirat ćemo osnovni URL stranica u obliku:

http://mojadomena.com

I nju sada možemo koristiti kroz cijelu aplikaciju a prvo mjesto gdje ćemo ju koristiti biti će u konfiguracijskoj datoteci ;)

Na otprilike 50-tu liniju dodajte ovo:

/*
 *---------------------------------------------------------------
 * URL
 *---------------------------------------------------------------
 *
 * probajmo otkriti osnovni URL
 *
 */
if(isset($_SERVER['HTTP_HOST']))
{
	$base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http';
	$base_url .= '://'. $_SERVER['HTTP_HOST'];
	$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
}
else
{
	$base_url = 'http://localhost/';
}

define('BASE_URL', $base_url);
unset($base_url);

ENVIRONMENTH_PATH konstanta

Odmah nakon gornjeg koda napišite(copy/paste;) sljedeći kod:

/*
 *---------------------------------------------------------------
 *  SISTEM + APLIKACIJA + UPLOAD MAPA
 *---------------------------------------------------------------
 *
 * Ovdje ćemo otkriti i podesiti putanje s obzirom na to gdje je aplikacija (loaklno, testni server ili produkcijski server)
 *
 */
//provjeravamo da li je definiran ključ SERVER_NAME u globalnoj varijabli $_SERVER (ovisi o postavkama servera)
if( ! defined('ENVIRONMENT_PATH')) define('ENVIRONMENT_PATH', ($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'mojadomena.hr');
switch (ENVIRONMENT_PATH)//provjeravamo što se nalazi u našoj konstanti
{
	case 'localhost': //putanje za localhost
		//define('SYSTEM_PATH', '../codeigniter/v2.1.0'); //može i ovako
		define('SYSTEM_PATH', 'C:/xampp/htdocs/codeigniter/v2.1.0');
		//define('APPLICATION_PATH', '../projekti/projekt_1'); //može i ovako
		define('APPLICATION_PATH', 'C:/xampp/htdocs/projekti/projekt_1');
		define('UPLOADS', 'C:/xampp/htdocs/public_html/uploads');
	break;
	case 'test.mojadomena.hr': //putanje za test subdomena na serveru
		define('SYSTEM_PATH', '/home/korisnicko_ime/codeigniter/v2.1.0/system');
		define('APPLICATION_PATH', '/home/korisnicko_ime/codeigniter/applications/projekt_1/test');
		define('UPLOADS', '/home/korisnicko_ime/uploads');
	break;
	default: //putanje za produkcijski server :)
		define('SYSTEM_PATH', '/home/korisnicko_ime/codeigniter/v2.1.0/system');
		define('APPLICATION_PATH', '/home/korisnicko_ime/codeigniter/applications/projekt_1/production');
		define('UPLOADS', '/home/korisnicko_ime/uploads');
	break;
}

Taj dio index.php-a bi trebao izgledati ovako:

U konstanti ENVIRONMENTH_PATH nalazi se ili vrijednost $_SERVER['SERVER_NAME'] varijable ako je definirana na serveru a ako nije onda ćemo ju popuniti sa svojom vrijednosti i tu ćemo postaviti da je default produkcijski server.

Nakon toga sa switch-em provjerimo vrijednost ENVIRONMENT_PATH konstante i s obzirom na to na kojem smo serveru (localhost, test.mojadomena.hr ili mojadomena.hr) postavljamo vrijednosti za sistemski direktorij, aplikacijski direktorij i uploads direktorij. Po potrebi slično možete postaviti dodatne putanje.

NAPOMENA: za test i produkcijski server navedene su tipične putanje za linux shared hosting vaše bi mogle biti drugačije pa ih sukladno tome prilagodite.

$system_path i $application_folder varijable
Sada ćemo u index.php-u zamjeniti vrijednosti ovih varijabli sa vrijednostima konstanti SYSTEM_PATH i APPLICATION_PATH

$system_path = SYSTEM_PATH;

odnosno:

$application_folder = APPLICATION_PATH;

Osvrnimo se sada malo na config direktorij (to bi bio ovaj u mapi projekt_1):

Za sada ćemo se pozabaviti sa config.php i database.php datotekama.

config.php

U ovoj datoteci nalaze se konfiguracijske postavke za cijeli framework/aplikaciju. Mi ćemo ju promjeniti na sljedeći način:

//ovdje je definiran osnovni url (dorbo da imamo definiranu BASE_URL konstantu tako da to ne moramo svaki puta mjenjati)
$config['base_url'] = BASE_URL; //ovdje je definirana indeksna stranica 'index.php'. uklonite to pa će nam url-ovo izgledati ovako http://loclhost/projekt_1/kontroler/metoda ;)
$config['index_page'] = ''; //potreban je .htaccess //ovdje moramo definirati enkripcijski ključ. samo upišite random znakove nemojte prepisivati ove
$config['encryption_key'] = 'herg8774D84Jtgirj3EEStGeeer'; /* ovdje konfiguriramo na koji način će se spremati sjednice spremati ćemo ih u bazu */
$config['sess_cookie_name'] = 'session'; $config['sess_expiration'] = 2*60*60; //definirana je u sekundama dakle 2sata*60minuta*60sekundi=7200sekundi
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE; //mora biti TRUE da bi se spremalo u bazu
$config['sess_table_name'] = 'projekt1__sessions'; // naziv tablice u bazi u koju će se spremati (!!!tablicu je potrebno manualno kreirati!!!)
$config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = TRUE; //ako koristite upload baziran na flash-u postavite na FALSE zbog buga u flash playeru
$config['sess_time_to_update'] = 300; //XSS filtriranje globalno podesite ovako
$config['global_xss_filtering'] = TRUE;

Cijela config.php datoteka izgleda ovako:

 

database.php

U ovoj datoteci definiramo stvari potrebne da bi naša aplikacija koristila bazu (host, baza, korisničko ime, lozinka, …)
S obzirom da želimo biti fleksibilni s obzirom na to gdje nem je aplikacija smještena i ovaj dio moramo fleksibilno definirati. Promjenite vašu database.php datoteku da izgleda ovako:

$active_group = ENVIRONMENT_PATH;
$active_record = TRUE;

$db['localhost']['hostname'] = 'localhost';
$db['localhost']['username'] = 'root';
$db['localhost']['password'] = 'root';
$db['localhost']['database'] = 'projekt1_db';
$db['localhost']['dbdriver'] = 'mysql';
$db['localhost']['dbprefix'] = '';
$db['localhost']['pconnect'] = TRUE;
$db['localhost']['db_debug'] = TRUE;
$db['localhost']['cache_on'] = FALSE;
$db['localhost']['cachedir'] = '';
$db['localhost']['char_set'] = 'utf8';
$db['localhost']['dbcollat'] = 'utf8_general_ci';
$db['localhost']['swap_pre'] = '';
$db['localhost']['autoinit'] = TRUE;
$db['localhost']['stricton'] = FALSE;

$db['test.mojadomena.hr']['hostname'] = 'test.mojadomena.hr';
$db['test.mojadomena.hr']['username'] = 'korisnicko_ime';
$db['test.mojadomena.hr']['password'] = 'lozinka';
$db['test.mojadomena.hr']['database'] = 'projekt1_db_test';
$db['test.mojadomena.hr']['dbdriver'] = 'mysql';
$db['test.mojadomena.hr']['dbprefix'] = '';
$db['test.mojadomena.hr']['pconnect'] = TRUE;
$db['test.mojadomena.hr']['db_debug'] = TRUE;
$db['test.mojadomena.hr']['cache_on'] = FALSE;
$db['test.mojadomena.hr']['cachedir'] = '';
$db['test.mojadomena.hr']['char_set'] = 'utf8';
$db['test.mojadomena.hr']['dbcollat'] = 'utf8_general_ci';
$db['test.mojadomena.hr']['swap_pre'] = '';
$db['test.mojadomena.hr']['autoinit'] = TRUE;
$db['test.mojadomena.hr']['stricton'] = FALSE;

$db['mojadomena.hr']['hostname'] = 'mojadomena.hr';
$db['mojadomena.hr']['username'] = 'korisnicko_ime';
$db['mojadomena.hr']['password'] = 'lozinka';
$db['mojadomena.hr']['database'] = 'projekt1_db';
$db['mojadomena.hr']['dbdriver'] = 'mysql';
$db['mojadomena.hr']['dbprefix'] = '';
$db['mojadomena.hr']['pconnect'] = TRUE;
$db['mojadomena.hr']['db_debug'] = TRUE;
$db['mojadomena.hr']['cache_on'] = FALSE;
$db['mojadomena.hr']['cachedir'] = '';
$db['mojadomena.hr']['char_set'] = 'utf8';
$db['mojadomena.hr']['dbcollat'] = 'utf8_general_ci';
$db['mojadomena.hr']['swap_pre'] = '';
$db['mojadomena.hr']['autoinit'] = TRUE;
$db['mojadomena.hr']['stricton'] = FALSE;

Naime, $db variabla je zapravo polje i u njega je mogu spremiti više konekcija.
U varijabli $active_group nalazi se defaultna konekcija. Baš tu varijablu popunjavamo s obzirom na kojem smo serveru/domeni.

Dakle ako smo na serveru/domeni “test.mojadomena.hr” onda će se učitati konekcija $db['test.mojadomena.hr'].

Tablica za sjednice

Spomenu sam ranije da ćemo sjednice spremati u bazu i da će nam za to biti potrebna tablica pa ćemo ju sada kreirati.

Prvo da kreiramo bazu (pogledajte instalaciju i konfiguraciju XAMPP-a:D):

Usmjerite vaš preglednik na:

http://localhost/phpmyadmin

i prijavite se sa:

User: ‘root’
Password: ‘root’

Nakon toga kreirajte bazu ‘projekt1_db’.

Nakon što ste uspješno kreirali bazu izvršite sljedeći upit:

 

CREATE TABLE IF NOT EXISTS `projekt1_sessions` (
session_id varchar(40) DEFAULT ’0′ NOT NULL,
ip_address varchar(16) DEFAULT ’0′ NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);

Nakon toga trebali bi u vašoj novoj bazi ‘projekt1_db’ imati tablicu ‘projekt1_sessions’ u koju će se spremati sjednice vaše novopečene aplikacije.

.htaccess
Da bi nam aplikacija/projekt ima “lijepe” URL-ove u config.php datoteci odredili smo:

$config['index_page'] = ”;

da bi nam to radilo moram kreirati .htaccess datoteku sa sljedećim sadržajem i ako ste na windozama na sljedeći način.

Sadržaj .htaccess datoteke:

Options -Indexes
DirectoryIndex index.php

RewriteEngine on
RewriteCond $1 !^(index\.php|css|js|flash|assets|captcha|resources|apc|images|img|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Želite li na windozama spremiti datoteku koja počinje sa točkom morat ćete to napraviti ovako:

Bitno je da prilikom spremanja izaberete “Save as type: All types (*.*)” kako je uokvireno na slici iznad;)

Huh…bome svašta nešto smo sada napravili.

Osim toga ja sam malo popunio public_html mapu sa još nekoliko direktorija (css, js, images) koji bi trebali biti samoobjašnjivi pa sada cijela stvar izgleda ovako.

Zaključak

Sada kada premjestite vašu aplikaciju na ‘mojadomena.hr’ ona će raditi bez ikakvih dodatnih konfiguracija :D

Ako vam se svidjelo ovo molim Vas da posjetite primjeri.com i postavite pitanja. Bit će nam i više nego drago odgovoriti na vaša pitanja.  Hvala :)
Primjeri

S obzirom da je ovaj članak malo poduži ako ima grešaka molim da mi javite a sljedećim tutorijalima nastavit ćemo sa kontrolerima i pogledima i našim prvim primjerima :) Ako ima želja… (ali samo trenutno) ispunjavam ;)

Da vas nebi mučio više negoli je potrebno pripremio sam i mali zip za preuzimanje sa projekt_1 i public_html mapama ;)

Označeno s:
Za ovaj članak možete glasati na CroPortalu i tako pomoći u njegovoj promociji. Ako članak još nije objavljen vi možete biti prvi!
Stavovi i mišljenja izrečena u ovome članku i/ili komentarima odnose se samo na autora/icu članka i/ili komentara, a ne i cijele Kroativ mreže. Zabranjeno je neovlašteno prenošenje članaka u cjelosti bez prethodnog dogovora ili bez istaknutog povratnog linka na www.kroativ.net stranicu te imena autora.
Oglas

5 komentara

Trackbacks & Pingbacks

Ostavite komentar

Autori s više od 10 komentara nemaju tag nofollow na svojim linkovima! Zabranjeno je vrijeđanje, omalovažavanje ili na bilo koji drugi način ometanje normalnog toka komentara. Također je zabranjeno oglašavanje u komentarima i sve druge vrste spam-a.

(*) polja su obavezna

XHTML: Možete koristiti: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">