Daugelis turbūt žino, kad egzistuoja tokie tinklalapiai, kurie leidžia iš ilgos ir nepatogios nuorodos padaryti trumpesnę (pvz. u.to , byt.ly ir t.t.).
Šiuo atveju mes pabandysime sukurti tokių nuorodų tarnybą.
Pradžioje sukuriame paprastą formą:
<form action="" method="post">
Įveskite nuorodą:<input type="text" name="url">
<button>Gauti...</button>
</form>
Sukuriame url laukams duomenų bazę:
id,url,url_real
Duomenų apdorojimas:
if(isset($_POST['url'])){
$url_real=mysql_real_escape_string(htmlspecialchars($_POST['url']));
if(file_get_contents($url_real)){
do {
$url_random=create_url();
$q=mysql_query("SELECT * FROM `url` where `url`='$url_random'");
}
while(@mysql_num_rows($q)>0);
$query=mysql_query("SELECT * FROM `urls` where `url_real`='$url_real'");
if(mysql_num_rows($query)==0){
mysql_query("INSERT INTO `urls`(url,url_real)
VALUES('$url_random','$url_real')");
echo 'site.ru/'.$url_random;
} else {
while($row=mysql_fetch_array($query)){
$url=$row['url'];
}
echo 'http://'.$_SERVER['SERVER_ADDR'].'/'.$url;
}
} else {
echo 'blogas url';
}
}
Panagrinėkime kodą.
Pradžioje patikriname ar nuoroda veikianti.
Vėliau mums reikia sugeneruoti trumpąją nuorodą ir patikrinti ar jį yra duomenų bazėje:
do {
$url_random=create_url();
$q=mysql_query("SELECT * FROM `url` where `url`='$url_random'");
}
while(@mysql_num_rows($q)>0);
function create_url()
{
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','w','x','y',
'z','A','B','C','D','E',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','W','X','Y',
'Z','F','1','2','3','4',
'5','6','7','8','9','0');
$url = "";
for($i = 0; $i < 6; $i++)
{
$random = rand(0, count($arr) - 1);
$url .= $arr[$random];
}
return $url;
}
Vėliau bus vykdomas nuorodos tikrinimas. Jei ji jau yra, tai išvedame trumpąją nuorodą iš duomenų bazės. O jei nėra, tai pridedame į duomenų bazę ir išvedame naują nuorodą:
$query=mysql_query("SELECT * FROM `urls` where `url_real`='$url_real'");
if(mysql_num_rows($query)==0){
mysql_query("INSERT INTO `urls`(url,url_real)
VALUES('$url_random','$url_real')");
echo 'http://'$_SERVER['SERVER_ADDR'].$url_random;
} else {
while($row=mysql_fetch_array($query)){
$url=$row['url'];
}
echo 'http://'.$_SERVER['SERVER_ADDR'].'/'.$url;
}
} else {
echo 'blogas url';
}
Beveik viskas baigta. Liko tik realizuoti trumpųjų nuorodų peradresavimą:
if(!empty($_GET['a'])){
$url=mysql_real_escape_string($_GET['a']);
$query=mysql_query("SELECT * FROM `urls` where `url`='$url'");
if(mysql_num_rows($query)==1){
while($row=mysql_fetch_array($query)){
$url_real=$row['url_real'];
}
header("location: ".$url_real);
} else {
header("location: http://".$_SERVER['SERVER_ADDR']);
}
}
Trumpųjų nuorodų tarnyba baigta. Pilnas kodas atrodys taip:
<?
include ('config.php');
mysql_connect($sqlhost, $sqluser, $sqlpass);
mysql_query("SET NAMES `CP1251`") or die (mysql_error());
mysql_select_db($sqldb);
if(!empty($_GET['a'])){
$url=mysql_real_escape_string($_GET['a']);
$query=mysql_query("SELECT * FROM `urls` where `url`='$url'");
if(mysql_num_rows($query)==1){
while($row=mysql_fetch_array($query)){
$url_real=$row['url_real'];
}
header("location: ".$url_real);
} else {
header("location: http://".$_SERVER['SERVER_ADDR']);
}
}
?>
<form action="" method="post">
Url:<input type="text" name="url">
<button>ok</button>
</form>
<?
function create_url()
{
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','w','x','y',
'z','A','B','C','D','E',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','W','X','Y',
'Z','F','1','2','3','4',
'5','6','7','8','9','0');
$url = "";
for($i = 0; $i < 6; $i++)
{
$random = rand(0, count($arr) - 1);
$url .= $arr[$random];
}
return $url;
}
if(isset($_POST['url'])){
$url_real=mysql_real_escape_string(htmlspecialchars($_POST['url']));
if(file_get_contents($url_real)){
do {
$url_random=create_url();
$q=mysql_query("SELECT * FROM `url` where `url`='$url_random'");
}
while(@mysql_num_rows($q)>0);
$query=mysql_query("SELECT * FROM `urls` where `url_real`='$url_real'");
if(mysql_num_rows($query)==0){
mysql_query("INSERT INTO `urls`(url,url_real)
VALUES('$url_random','$url_real')");
echo 'http://'$_SERVER['SERVER_ADDR'].$url_random;
} else {
while($row=mysql_fetch_array($query)){
$url=$row['url'];
}
echo 'http://'.$_SERVER['SERVER_ADDR'].'/'.$url;
}
} else {
echo 'blogas url';
}
}
?>
Pasiremta: habrahabr.ru
Komentarų nėra:
Rašyti komentarą