giovedì 21 febbraio 2013

CodeIgniter .htaccess per eliminare index.php

Come per altre cose su questo blog, più che un post, è un promemoria. In questo caso si tratta del file .htaccess nella root di installazione di CodeIgniter per eliminare index.php dall'url

RewriteEngine on
RewriteBase /
RewriteRule ^(application|system|\.git) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]

salviamo il file e riavviamo apache

# /etc/init.d/apache2 restart Ora l'indirizzo, che prima apparirebbe www.example.com/index.php/modulo, è un ben più carino www.example.com/modulo

Nel caso in cui, aggiornando la pagina, non dovesse scomparire il fastidioso index.php dobbiamo probabilmente attivare il modulo rewrite di apache. Per farlo seguiamo l'altro mia guida: Apache - abilitare mod_rewrite

mercoledì 13 febbraio 2013

MySQL - concatenare campi su record duplicati

Oggi mi è capitato di avere a che fare con una query con una join che mi restituiva (giustamente) record duplicati. Andiamo per esempi così ci capiamo, questa è la tabella A

mysql> SELECT * FROM A;
+------+------------+
| idA  | oggetto    |
+------+------------+
|    1 | bottiglia  |
|    2 | bastone    |
|    3 | fazzoletto |
+------+------------+
3 rows in set (0.00 sec)

e questa la tabella B

mysql> SELECT * FROM B;
+------+-----------+
| idB  | categoria |
+------+-----------+
|    1 | legno     |
|    2 | stoffa    |
|    3 | vetro     |
|    4 | carta     |
|    5 | plastica  |
+------+-----------+
5 rows in set (0.00 sec)

la terza tabella è una semplice tabella per la relazione n -> m dove vengono salvati gli accoppiamenti che vedremo con la semplice JOIN

mysql> SELECT oggetto, categoria FROM C
    -> JOIN B USING(idB)
    -> JOIN A USING(idA);
+------------+-----------+
| oggetto    | categoria |
+------------+-----------+
| bastone    | legno     |
| fazzoletto | stoffa    |
| bottiglia  | vetro     |
| fazzoletto | carta     |
| bottiglia  | plastica  |
+------------+-----------+
5 rows in set (0.00 sec)

però, per nostre esigenze, vogliamo una sola riga per oggetto. A questo punto viene in nostro aiuto la funzioncina GROUP_CONCAT e la utilizzeremo così:

mysql> SELECT oggetto, GROUP_CONCAT(categoria) FROM C
    -> INNER JOIN B USING(idB)
    -> INNER JOIN A USING(idA)
    -> GROUP BY idA;
+------------+-------------------------+
| oggetto    | GROUP_CONCAT(categoria) |
+------------+-------------------------+
| bottiglia  | plastica,vetro          |
| bastone    | legno                   |
| fazzoletto | carta,stoffa            |
+------------+-------------------------+
5 rows in set (0.00 sec)

dove idA è la chiave primaria della tabella A contenente gli oggetti.
Questo ovviamente è un utilizzo semplicistico. Ad esempio è possibile aggiungere un SEPARATOR all'interno della funzione

GROUP_CONCAT(categoria SEPARATOR '___')

in questo modo nell'esempio di prima avremmo ottenuto questo risultato

+------------+-------------------------+
| oggetto    | GROUP_CONCAT(categoria) |
+------------+-------------------------+
| bottiglia  | plastica___vetro        |
+------------+-------------------------+

mercoledì 6 febbraio 2013

addprefix - per aggiungere un prefisso a tutti i file di una directory

Stamattina nella mia inbox ho trovato questo: "semplice semplice: rinominare file di una cartella con un prefisso".
Unendo l'utile all'utile ho buttato su bitbucket.org una piccola utility che permette appunto di aggiungere un prefisso a tutti i file in una directory. Vediamo un esempio:
$ ls ~/Pictures
img1.png img2.jpg

lanciando quindi l'utility vediamo subito dopo il risultato
$ ./addprefix --dir ~/Pictures FOO
$ ls ~/Pictures
FOOimg1.png FOOimg2.jpg

Per approfondire i sorgenti potete consultare la repository qui https://bitbucket.org/overflowsith/addprefix

giovedì 31 gennaio 2013

Apache - abilitare mod_rewrite

Spesso dopo una nuova installazione il mod_rewrite non è abilitato di default. Questo modulo di apache serve per elaborare le richieste e modificare gli url in arrivo. Un esempio potrebbe essere il togliere l'estensione dalla pagina aperta, trasformando quindi

http://www.esempio.it/pagina.php

in

http://www.esempio.it/pagina

L'utilità di questo modulo è quindi quasi fondamentale.
Vediamo quindi come abilitarlo:

# a2enmod rewrite

prima di riavviare apache, andiamo a modificare le impostazioni degli eventuali virtual host.
apriamo con l'editor preferito il file

# nano /etc/apache2/sites-enabled/000-default

e applichiamo nella sezione Directory /var/www la seguente modifica

-- AllowOverride None
++ AllowOverride All

Dopo aver cambiato da None a All la regola, possiamo passare al riavvio di apache

# /etc/init.d/apache2 restart

ora siamo liberi di creare i nostri .htaccess all'interno della nostre directory /var/www e eventuali sottodirectory

martedì 22 gennaio 2013

PHP default charset

Piccolo appunto veloce. Per cambiare il charset di default in PHP basta editare il file php.ini (/etc/php5/apache2/php.ini per gli utenti Debian GNU/Linux) e aggiungere/modificare nel seguente modo: default_charset="utf-8"