2
Вероятно Вы уже знакомы с сервисом коротких ссылок 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">
-
<label>
-
<div align="center">
-
<input type="text" name="url" id="url" />
-
</div>
-
-
</label>
-
<label>
-
<div align="center">
-
<input type="submit" name="submit" id="submit" value="укоротить" />
-
</div>
-
-
</label>
-
</form>
-
Пришло время для php. Создайе файл shuffle.php и вставте в него следующий код
-
//функция для установки соединения с базой данных
-
function dbconnect(){
-
//HOST – адрес сервера баз данных (обычно localhost)
-
//USERNAME – имя пользователя
-
//PASSWORD – пароль
-
//DB – имя базы данных (у меня url)
-
}
-
-
//Функция для генерирования уникальной ссылки длинны $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’";
-
-
//добавляем данные в базу данных
-
$insert_query = "INSERT INTO `short_urls` (`id`, `short`, `url`, `stamped`) VALUES (NULL, ‘$out’, ‘$in’, NOW());";
-
-
return "http://yoursite.ru/".$out; //генерируем и возвращаем короткую ссылку
-
}
Последняя функция проверяет присутствует ли сгенерированый индентификатор в таблице, если присутствует, то генерируется новый, пока не сгенерируется уникальный индентификатор, затем генерируется ссылка.
Теперь соберем все вместе. Создайте файл forward.php и вставте в него следующий код
-
include ’shuffle.php’;
-
-
$i = $_SERVER[‘QUERY_STRING’];
-
//проверяем формат индентификатора
-
dbconnect(); //соединяемся с базой
-
-
$result = mysql_query("SELECT short, url FROM `short_urls` WHERE `short` = ‘$i’") or die(mysql_error());
-
//проверка на наличие индентификатора в базе данных
-
exit;
-
}else
-
{
-
}
-
}
-
else
-
{
-
}
В файл .htaccess вставте
-
XBitHack Off
-
RewriteEngine On
-
RewriteCond %{REQUEST_URI} \/([0-9a-z]{4})$ [NC]
-
RewriteRule ^(.*) http://www.yoursite.ru/forward.php?%1 [L]
Теперь создайте файл shorten.php и вставте в него следующий код.
-
<p align="center">Ваша ссылка:
-
<p align="center">Была уменьшена до:
-
shorten.php будет отображать короткую ссылку
Сервис коротких ссылок готов. Как Вы уже заметили в этом нет ничего сложного. Если возникли трудности, задавайте свои вопросы в комментариях


Статья класс! То что искал
хех я вот хотел написать подобное только искал алгоритмы хеширования, или что-нибудь в этом роде, а ты простым shuffle все сделал.. молоток