Mi sono trovato a volte con la necessità di avere indirizzi url del tipo:

www.nomesito.com/username

dove come su facebook, myspace, e di altri siti del genere, un utente può avere un url con il suo stesso username nell’indirizzo, di facile memorizzazione.

La soluzione qui proposta è per chi utilizza Apache come webserver, e prevede un editing del file .htaccess nella root del sito.

Il file .htaccess (se non esiste bisogna crearlo) deve contenere:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z_0-9\-]+)$ user.php?username=$1

in questo modo obblighiamo Apache e reindirizzare un url del tipo www.nomesito.com/username alla pagina www.nomesito.com/user.php?username=username.

Lo script user.php dovrà poi prelevare la variabile $_GET['username'], e (una volta resa sicura contro sql injection), andrà a prelevare dal db i dati dell’utente il cui username corrisponde al contenuto della variabile.

Nell’esempio il rewriterule prevede la possibilità dei soli caratteri alfanumerici, più l’underscore _ e il meno -.

Anche in fase di registrazione dell’utente bisognerà stare particolarmente attenti a non permettere l’utilizzo di caratteri diversi da quelli ammessi dal rewriterule.

Ovviamente il file user.php, nonchè la variabile username, così come i caratteri ammessi dalla regola di rewrite, possono essere sostituiti con ciò che ci serve.

Premesso che la cosa migliore è utilizzare immagini della giusta dimensione, e che anche in un sistema aperto dove è previsto l’upload di immagini, se vogliamo che le immagini siano di una certa dimensione, sarebbe opportuno farlo in fase di upload, propongo qui un semplice metodo per ridimensionare proporzionalmente le immagini con l’ausilio della funzione php getimagesize().

Supponiamo di dover visualizzare una certa immagine di dimensione 300×400 e volerla mostrare proporzionata a 150×200, ora conoscendo le dimensioni originali la cosa è molto semplice:

<img src="immagine.jpg" alt="descrizione immagine" width="150" height="200" />

in questo modo l’immagine immagine.jpg sarà mostrata più piccola, mantenendo le proporzioni di altezza e larghezza.

Però supponiamo di non conoscere le dimensioni e di volerla comunque mostrare mantenendo le proporzioni.

La funzione getimagesize() di php è molto utile.

Tale funzione restituisce infatti un array contenente tra l’altro la larghezza (width) e l’altezza (height) dell’immagine.

L’array sarà così costruito:

Array
(
    [0] => 300
    [1] => 400
    [2] => 2
    [3] => width="300" height="400"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)

Dove i primi due campi (0 e 1) sono relativi rispettivamente a larghezza e altezza. Pertanto lo script sarà il seguente:

<?php
// riempio l'array $image_info con i dati dell'immagine immagine.jpg
$image_info = getimagesize('immagine.jpg');
// qui mettiamo la dimensione desiderata per la larghezza, in questo caso riduco del 50%
$width=$image_info[0]*0.5;
// qui mettiamo la dimensione desiderata per l'altezza, in questo caso riduco del 50%
$height=$image_info[1]*0.5;
?>
<img src="immagine.jpg" alt="descrizione immagine" width="<?php echo $width; ?>"
height="<?php echo $height; ?>" />

A questo punto l’immagine dovrebbe essere correttamente visualizzata a dimensioni dimezzate.

January 10th, 2010Campi numerici in mysql

Per chi si fosse mai chiesto che cosa voglia dire quel numero tra parentesi dopo int, tinyint ecc su mysql, ebbene quel numero viene usato nel caso in cui il campo abbia opzione “zerofill”, e si riferisce alle cifre del numero.
Se ad esempio impostate il campo di tipo int (10) zerofill, e inserite come valore il numero 15, la tabella visualizzerà 0000000015 (cioè 10 cifre invece di 2), oppure se il campo è un int (3) il valore visualizzato sarà 015.
Nulla cambia invece per la dimensione del campo in bytes, che per un intero int è di 4 bytes.
Possiamo cioè memorizzare un numero intero fino a 2^32 (4.294.967.296). Importante è settare il campo “unsigned” se prevediamo che non ci servano i valori negativi.
Infatti di default metà dei numeri a disposizione sono usati per rappresentare i valori negativi, pertanto di default su un campo int possiamo memorizzare da -2147483648 a 2147483647, mentre settando “unsigned” possiamo memorizzare da 0 a 4.294.967.295.
Se questo numero non ci dovessa bastare, possiamo usare il tipo BIGINT, che memorizza un numero fino a 2^64.
Ecco uno schema degli interi in mysql:

TINYINT – 1 byte (2^8 = 256)
SMALLINT – 2 bytes (2^16 = 65536)
MEDIUMINT – 3 bytes (2^24 = 16777216)
INT – 4 bytes (2^32 = 4.294.967.296)
BIGINT – 8 bytes (2^64 = 18.446.744.073.709.551.616)


© 2010 Massimo Perini | programmatore php, web design, autore, multimedia | Powered by Wordpress