Создаем сервис коротких ссылок
Вероятно Вы уже знакомы с сервисом коротких ссылок tinyurl.com. Давайте создадим свой собственный сервис коротких ссылок.
Как работает сервис коротких ссылок
Например Вы залили файл на narod.ru/disk и получили ссылку вида http://narod.ru/disk/9036797010/somefile.html. Запомнить ее будет затруднительно, а записывать долго для этого и существуют сервисы коротких ссылок. Вы заходите на tinyurl.com, копируете в специальную форму ссылку и получаете короткую ссылку вида http://tinyurl.com/8fp ее и запомнить, и записать намного быстрее.
Приступим
Для этого нам понадобится:
- PHP
- MySQL
- mod_rewrite
Для начала создадим новую базу данных, назвав ее url (для этого можете воспользоваться phpmyadmin). Теперь приступим к созданию таблицы. Назовем ее short_urls.
CREATE TABLE `short_urls` ( `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `short` VARCHAR( 6 ) NOT NULL , `url` VARCHAR( 1000 ) NOT NULL , `stamped` DATETIME NOT NULL ) ENGINE = MYISAM ;
Первый столбец будет идентификатором. В столбце short будет храниться короткая часть ссылки (будет генерироваться ссылка вида http://yoursite.ru/xxxxxx, где xxxxxx короткая часть ссылки, xxxxxx будет состоять из цифр и букв это даст нам 2176782336 комбинаций). В столбце url будет храниться «укорачиваемая» ссылка. Последний столбец будет содержать в себе даты добавления ссылок.
Теперь создадим html шаблон сервиса. Создайте файл index.php и скопируйте в него следующий код
<form id="shorten_form" name="shorten_form" method="post" action="shorten.php"> <input type="text" name="url" id="url" /> <input type="submit" name="submit" id="submit" value="укоротить" /> </form>
Пришло время для php. Создайе файл shuffle.php и вставте в него следующий код
//функция для установки соединения с базой данных
function dbconnect(){
//HOST – адрес сервера баз данных (обычно localhost)
//USERNAME – имя пользователя
//PASSWORD – пароль
$link = mysql_connect(‘HOST’, ‘USERNAME’, ‘PASSWORD’);
//DB – имя базы данных (у меня url)
$db_selected = mysql_select_db(‘DB’, $link);
}
//Функция для генерирования уникальной ссылки длинны $numAlpha
function generateurl($numAlpha=6)
{
dbconnect(); //соединяемся с базой данных
$listAlpha = ‘abcdefghijklmnopqrstuvwxyz0123456789′; //символы из которых генерируется индентификатор
return str_shuffle(substr(str_shuffle($listAlpha),0,$numAlpha)); //генерируем индентификатор и возвращаем
}
//функция для «укорачивания» ссылок
function geturl($in)
{
dbconnect(); //соединяемся с базой
//генерируем индентификатор и проверяем его уникальность
do{
$out = generateurl();
$query = "SELECT short FROM `short_urls` WHERE `short` = ‘$out’";
$result = mysql_query($query);
} while (mysql_num_rows > 0);
//добавляем данные в базу данных
$insert_query = "INSERT INTO `short_urls` (`id`, `short`, `url`, `stamped`) VALUES (NULL, ‘$out’, ‘$in’, NOW());";
$result = mysql_query($insert_query);
return "http://yoursite.ru/".$out; //генерируем и возвращаем короткую ссылку
}
Последняя функция проверяет присутствует ли сгенерированый индентификатор в таблице, если присутствует, то генерируется новый, пока не сгенерируется уникальный индентификатор, затем генерируется ссылка.
Теперь соберем все вместе. Создайте файл forward.php и вставте в него следующий код
include ‘shuffle.php’;
$i = $_SERVER[‘QUERY_STRING’];
//проверяем формат индентификатора
if (preg_match("/^[0-9a-z]{6}$/", $i)) {
dbconnect(); //соединяемся с базой
$result = mysql_query("SELECT short, url FROM `short_urls` WHERE `short` = ‘$i’") or die(mysql_error());
//проверка на наличие индентификатора в базе данных
if (mysql_num_rows($result) < 1) {
header("Location: http://yoursite.ru");
exit;
}else
{
$row = mysql_fetch_row($result);
header("Location: ".$row[1]); //переадресация по хранимому адресу
}
}
else
{
header("Location: http://yoursite.ru");
}
В файл .htaccess вставте
XBitHack Off
RewriteEngine On
RewriteCond %{REQUEST_URI} \/([0-9a-z]{4})$ [NC]
RewriteRule ^(.*) http://www.yoursite.ru/forward.php?%1 [L]
Теперь создайте файл shorten.php и вставте в него следующий код:
<?php include `shuffle.php`; ?> <p align="center">Ваша ссылка: <p align="center"><?php echo $_POST[‘url’]; ?> <p align="center">Была уменьшена до: <p align="center"><?php echo geturl($_POST[‘url’]); ?>
shorten.php будет отображать короткую ссылку
Сервис коротких ссылок готов. Как Вы уже заметили в этом нет ничего сложного. Если возникли трудности, задавайте свои вопросы в комментариях
Статья класс! То что искал
хех я вот хотел написать подобное только искал алгоритмы хеширования, или что-нибудь в этом роде, а ты простым shuffle все сделал.. молоток