Простой сокращатель ссылок на PHP

27 Июл
2012

Все знают про такие сервисы, как vk.cc, goo.gl, bit.ly. Сейчас мы создадим подобный, на основе обычных файлов и .htaccess.

Итак, поехали. Все объяснения в коде.

Создаём .htaccess

RewriteEngine On
RewriteBase /


Создаём форму

<DOCTYPE html>
<html>
<head>

<title>Сокращатель ссылок</title>

</head>
<body>
<form action="" method="post">

<!-- атрибут action указывает ссылку на обработчик. В данном примере мы будем использовать тот же файл где и сама форма. -->

<input type="url" required placeholder="Введите ссылку..." autocomplete="off" name="url">

<!-- тег input лучше сделать используя новый атрибут (html5) url, он не отправит форму, пока адрес не будет начинаться с http://. Так же мы сделаем это поле обязательным для заполнения, добавим подсказывающий текст и запретим автопродолжение -->

<input type="submit" name="submit" value="Сократить">
</form>






Сам обработчик

<?php
$h = "QqWwEeRrTtYyUuIiOoPpAaSsDdFfGgHhJjKkLlZzXxCcVvBbNnMm1234567890"; //Выбираем символы, из которых будет состоять наш рандом
$rand = substr(str_shuffle($h), 0, 5); //создаём ранд. Цифра 5 обозначает длину ранда
$site = "http://test.com/"; //Адрес вашего сайта. Слэш обязателен!
$url = $_POST['url'];

if ($_POST['submit']) {
echo "<a href='$site$rand' target='_blank'>$site$rand</a>"; //выводим пользователю ссылку, в виде ссылки
$f = fopen("a/$rand.php", "w"); //Создаём файл с именем ранда. Я решил скидывать файлы в каталог a, поэтому не забудьте его создать!
fwrite($f, "<?php header('Location: $url') ?>"); //И записываем в код редиректа, с ссылкой которую ввёл пользователь
fclose($f); //Закрываем файл

$fh = fopen(".htaccess", "a"); //Открываем файл .htaccess с дозаписью на последний байт
fwrite($fh, "
RewriteRule ^$rand$ /a/$rand.php"); //Записываем ссылку на файл в каталоге a и её сокращённый вариант, который был дан пользователю. !ВНИМАНИЕ! Перенос сделан специально, иначе всё будет писаться в плотную и вызовет 500 ошибку!
fclose($fh); //Закрываем файл
}
?>


Не забываем закрыть за собой

</body>
</html>

В общем всё элементарно! На представленных в начале сервисах всё происходит через MySQL, но об этом позже.

P.S. Вы можете скачать исходники.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх