Uso avanzato
4.1 Rimuovere index.php dagli Url
Nell’installazione standard, la stringa "‘index.php"’ compare negli url di Codeingniter, ad esempio:example.com/index.php/news/article/my_articleÈ possibile rimuovere quell’antiestetico index.php usando, ad esempio un file .htaccess se si sta lavorando su web server Apache, usando il modulo chiamato mod_rewrite e una logica chiamata "‘negativa"’: a parte determinate eccezioni (cartella assets, file robots.txt, il file index.php stesso) considera tutto ciò che viene richiesto come concatenato ad index.php.
RewriteEngine on RewriteCond $1 !^(index\.php|assets|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L]Non dimentichiamoci inoltre di modificare il file di configurazione impostando una determinata variabile vuota
$config['index_page'] = '';Questa soluzione può non sempre funzionare. A seconda delle configurazioni dell’hosting / web server, può non dare il risultato sperato. In questi casi viene consigliato di tentare tutte le possibili configurazioni per la variabile che determina la stringa URI
/* | Se AUTO (auto-detect) non funziona, prova uno dei seguenti | | 'PATH_INFO' Uses the PATH_INFO | 'QUERY_STRING' Uses the QUERY_STRING | 'REQUEST_URI' Uses the REQUEST_URI | 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO */ $config['uri_protocol'] = 'AUTO';Ad esempio, per il diffuso hosting aruba, è necessario il seguente .htaccess
RewriteEngine on RewriteCond %{REQUEST_URI} ^/system.* RewriteCond $1 !^(index\.php|assets|robots\.txt) RewriteRule ^(.*)$ index.php?/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ index.php?/$1 [L]
Sessioni
Codeigniter offre un comodo strumento per mantenere informazioni relative ad un determinato utente, la classe Session. Bisogna subito chiarire che non fa uso delle classiche sessioni Php, ma anzi ha un meccanismo diverso, basato sui cookies oppure, fortemente consigliato, su un database. La visione classica di una sessione, in questo framework, è un cookies che contiene informazioni. Queste informazioni sono strutturate in modo da poter leggere e scrivere variabili di sessione in modo agile e semplice. Per rendere univoca la sessione e fare in modo che i dati siano relativi ad un solo utente, una sessione in CI è così strutturata:- dati di sessione (variabili)
- id di sessione (univoco)
- indirizzo ip dell’utente
- user agent del browser dell’utente
- timestamp dell’ultima attività
$config['sess_encrypt_cookie']=TRUE;Una limitazione da non poco conto è relativa alla dimensione dei dati salvabili in una sessione basata su cookies, ossia 4 KB. In caso di cifratura del cookie, questo limite si abbassa poiché gli algoritmi spesso aumentano la dimensione della stringa. Poiché le sessioni vengono usate soprattutto in caso di login da parte di un utente, ossia per contenere le informazioni di accesso di quest’ultimo e permettergli di eseguire determinate azioni, la sicurezza ricopre un ruolo fondamentale. Il consiglio è quindi quello di salvare le sessioni su database, creando una semplice tabella (ad esempio per MySql):
CREATE TABLE IF NOT EXISTS `ci_sessions` ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(16) DEFAULT '0' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) );Comunichiamo ora a Codeigniter che le sessioni dovranno basarsi sulla tabella appena creata:
$config['sess_use_database'] = TRUE; $config['sess_table_name'] ='ci_sessions';Bisogna tenere bene a mente il funzionamento della sessione: dopo un tempo definito il sistema ricreerà il session_id e aggiornerà data e ora dell’ultima attività (il timestamp visto in precedenza). L’intervallo predefinito per questo aggiornamento è 5 minuti, ma può essere modificato.
Inizializzare e distruggere una sessione
Possiamo caricare manualmente la libreria di sessione usando il comando:$this->load->library('session');Per distruggere una sessione, usiamo:
$this->session->sess_destroy();
Interagire con le sessioni
Scrivere una variabile di sessione è possibile mediante una specifica funzione della classe Session://Singola variabile $this->session->set_userdata('some_name', 'some_value'); //Più variabili in una volta sola con array associativo $newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);Per ottenere una delle variabili di sessione impostate in precedenza:
$username = $this->session->userdata('username');Infine, per cancellare una variabile di sessione (ad esempio username):
$this->session->unset_userdata('username');
Flashdata: un tipo particolare di sessione
Una variabile flashdata può essere letta solo una volta, poiché alla lettura la variabile viene eliminata. Molto spesso viene usata per i vari messaggi di errore o di feedback positivo (ad esempio "Operazione completata con successo"). Una variabile di questo tipo si imposta con la funzione:$this->session->set_flashdata('item', 'value');E si legge (ricordate bene: una sola volta, dopodiché la variabile sarà cancellata) con il comando
$this->session->flashdata('item');
Download assistito di file
Codeigniter offre un comodo strumento per forzare il download di un determinato file da parte di un utente. Per prima cosa, bisogna caricare l'helper adatto:$this->load->helper('download');Ed utilizzare la funzione apposita, con il seguente formato
force_download('filename', 'data')Questa funzione genera automaticamente gli header http necessari per forzare un download all’utente. Il primo parametro è il nome che si vuol dare al file da salvare, il secondo parametro sono i dati che si vogliono far scaricare. Quest’ultimo parametro deve essere sempre una stringa; bisogna quindi caricare il contenuto di un file come stringa per effettuarne il download. Vediamo qualche esempio:
$data = 'Here is some text!'; $name = 'mytext.txt'; force_download($name, $data);Il seguente codice è necessario nel caso di un file esistente:
// Leggo tutto il contenuto del file $data = file_get_contents("/path/to/photo.jpg"); $name = 'myphoto.jpg'; force_download($name, $data);
Prima parte della guida: Guida Codeigniter 1 - Introduzione
Seconda parte della guida: Guida Codeigniter 2 - Primi passi
Quarta parte della guida: Guida Codeigniter 4 - Gestione del multilingua
EDIT:
Ho pubblicato la guida in formato PDF contenente tutti gli argomenti affrontati sul blog, liberamente scaricabile e stampabile. La trovate al link:
http://stefanobianchini.blogspot.it/2012/11/guida-codeigniter-modo-mio-pdf-in.html
1 commento:
ho impostato il file htaccess nella root del server aruba, ma non funziona, invece funziona perfettamente per il mio server locale apache,
prof. Zullo stefano.zullo@tiscali.it
Posta un commento