Url brevi: realizzazione form di creazione tiny url
Posted on febbraio 26, 2010
Filed Under Appunti di Php | Leave a Comment
Oggi vedremo come realizzare un sistema analogo al famoso tinyurl per la generazione di url brevi. La tecnologia usata per lo sviluppo e’ PHP + MySQL con server Linux che supporti il rewrite delle url. E’ necessario conoscere come si crea un database in MySQL tramite il pannello PhpMyAdmin o altra utility di gestione dei database, cosa e’ il rewrite ed avere una conoscenza base di PHP.
L’obiettivo dell’articolo e’ convertire una url lunga e difficoltosa da ricordare con una url piu’ breve da comunicare ad amici e clienti.
Es.:
http://maps.google.it/maps?f=q&source=s_q&hl=it&geocode=&q=navigli&sll=45.440742,9.158692&sspn=0.012948,0.033088&ie=UTF8&radius=0.8&rq=1&ev=p&hq=navigli&hnear=&ll=45.440742,9.158692&spn=0.012948,0.033088&z=15
Convertirlo in:
http://www.urlbrevi.com/a/maps.php
Iniziamo creando la tabella url_brevi cosi’ fatta:
`url` VARCHAR( 500 ) NOT NULL ,
`url_breve` VARCHAR( 20 ) NOT NULL ,
`data_ins` DATE NOT NULL) ENGINE = MYISAM
- key_url e’ la chiave incrementale primaria;
- url e’ l’indirizzo da ridurre;
- url_breve e’ l’url breve generato dal sistema;
- data_ins e’ la data di inserimento dell’url.
Iniziamo creando la pagina index.php completa contenente il form ove l’utente inserira’ la propria url e ricevera’ in risposta l’url breve da utilizzare. Questo il codice della pagina:
<?php
isset($_POST['url']) ? $urlBreve = addslashes($_POST['url']) : $urlBreve = “”;
$messaggio = “”;
if (strlen($urlBreve)>0)
{
include(“config/db.php”);
// Crea stringa casuale…
function randomstring($len)
{
$i = 0;
$str = “”;
srand();
while($i<$len)
{
$str.=chr((rand()%26)+97);
$i++;
}
$str=$str.substr(uniqid (“”),0,22);
return $str;
}
$baseUrl = “http://www.urlbrevi.com/“; // Sito fittizio utilizzato per il test.
$nomeTabella = “url_brevi”; // Nome della tabella presente in Database usata per il test.
$urlEsiste = “SI”;
// Controllo la validita’ dell’url inserito…
if (filter_var($urlBreve,FILTER_VALIDATE_URL))
{
// Se l’url gia’ esiste…
while($urlEsiste == “SI”)
{
$urlRand = substr(randomstring(6),0,6);
$queryUrl = “SELECT * FROM $nomeTabella WHERE url_breve =’$urlRand’”;
$sqlBreve = @mysql_query($queryUrl);
if ($sqlBreve)
{
if (mysql_num_rows($sqlBreve)==0)
{
// Inserisco i dati in Database…
$queryInsUrl = “INSERT INTO $nomeTabella (url, url_breve, data_ins) VALUES (‘$urlBreve’, ‘$urlRand’, NOW())”;
$sqlBreveIns = @mysql_query($queryInsUrl);
$messaggio = “L’url breve da utilizzare e’:<br><a href=’”.$baseUrl.”a/”.$urlRand.”.php’ target=’_blank’>”.$baseUrl.”a/”.$urlRand.”.php</a>”;
$urlEsiste = “NO”;
}
}
else
$messaggio = “Problemi con il database. Ti invitiamo a riprovare piu’ tardi.”;
}
}
else
$messaggio = “Url inserito non valido. Deve essere nella forma: http://www.miositodaridurre.tld/stringa”;
}
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Url brevi</title>
</head>
<body>
<?php
if (strlen($messaggio)>0)
echo($messaggio);
?>
<br /><br />
<div>Inserisci l’url da ridurre</div>
<form method=”post” name=”modulo”>
Url: <input type=”text” name=”url” maxlength=”500″ /><br /><br />
<input type=”submit” value=”Crea url >>” />
</form>
</body>
</html>
$dbhost = ‘HOST‘;
$dbusername = ‘USER‘;
$dbpasswd = ‘PSW‘;
$database_name = ‘DBNAME‘;
$connection = mysql_connect(“$dbhost”,”$dbusername”,”$dbpasswd”) or die (“Impossibile collegarsi al server.”);
$db = mysql_select_db(“$database_name”, $connection) or die(“Impossibile selezionare il database.”);
?>
- USER e’ il nome dell’utente che puo’ accedere al Database
- PSW e’ la password per accedere al Database
- DBNAME e’ il nome del Database
RewriteEngine On
#REDIRECT
RewriteRule ^a/(.*).php$ urlbreve.php?url=$1
Questo il codice della pagina urlbreve.php:
include(“config/db.php”);
isset($_GET['url']) ? $urlBreve = addslashes($_GET['url']) : $urlBreve = “”;
$messaggio = “Url non presente in Database.”;
$nomeTabella = “url_brevi”;
$queryUrl = “SELECT * FROM $nomeTabella WHERE url_breve =’$urlBreve’”;
$sqlBreve = @mysql_query($queryUrl);
if (($sqlBreve) AND (mysql_num_rows($sqlBreve)>0))
{
$dati = mysql_fetch_array($sqlBreve);
$url = stripslashes($dati['url']);
header(‘Location: ‘.$url);
die();
}
echo($messaggio);
?>
Inserire un nuovo campo nel form principale che l’utente puo’ compilare e sara’ il nome dell’url breve restituito (Es.: maps) se disponibile.
- scadenza url dopo 7 giorni
Bastera’ fare una routine che tramite un cronjob verifichi per ogni url creata non siano trascorsi piu’ di 7 giorni:
`url` VARCHAR( 400 ) NOT NULL ,
`url_breve` VARCHAR( 20 ) NOT NULL ,
`data_ins` DATE NOT NULL
) ENGINE = MYISAM
Others Script adv
Leave a Reply