Создаём сокращатель URL. Часть 3.
![Создаём сокращатель URL. Часть 3.](/images/articles/url-shortener-3.jpg)
Привет всем и это последняя статья из цикла по созданию сокращателя URL. В прошлой статье мы создали класс для работы, а сегодня нам осталось лишь его использовать по назначению.
Откроем файл shorten.php и пропишем следующее:
<?php
session_start();
require_once "classes/shortener.php";
$s = new Shortener();
if(isset($_POST['url'])) {
$url = $_POST['url'];
if($code = $s->makeCode($url)) {
$_SESSION['feedback'] = "Готово! Вот ваша ссылка: <a href='http://localhost/test/$code'>http://localhost/test/$code</a>";
} else {
$_SESSION['feedback'] = "Ошибка! Возможно, некорректный URL?";
}
}
header('Location: index.php');
?>
Теперь откроем файл index.php с нашей разметкой и немного его изменим:
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Сокращатель URL</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container">
<h1 class="title">Сокращатель URL</h1>
<?php
if(isset($_SESSION['feedback'])) {
echo "<p>".$_SESSION['feedback']."</p>";
unset($_SESSION['feedback']);
}
?>
<form action="shorten.php" method="post">
<input type="url" name="url" placeholder="Введите URL" autocomplete="off">
<input type="submit" value="Сократить">
</form>
</div>
</body>
</html>
Дальше redirect.php
<?php
require_once "classes/shortener.php";
if(isset($_GET['code'])) {
$s = new Shortener();
$code = $_GET['code'];
if($url = $s->getUrl($code)) {
header('Location: {$url}');
exit();
}
}
header('Location: index.php');
?>
Всё, что нам осталось, это файл .htaccess
RewriteEngine on
RewriteRule ^([a-z0-9]+)$ redirect.php?code=$1
Код сам говорит за себя, но всё-таки немного поясню. В файле shorten.php мы подключаем наш класс, создаём его объект и проверяем наличие url. Если он есть, то записываем в переменную, которую передаём в метод makeCode. Если метод makeCode возвращает код, то записываем в сессию нашу ссылку, иначе записываем туда ошибку, а в конце делаем редирект на главную страницу.
В файле index.php мы начинаем сессию и проверяем её наличие. Если она есть, то выводим значение и уничтожаем её.
В файле redirect.php мы проверяем наличие get параметра с кодом. Если есть, то создаём объект нашего класса, записываем код в переменную $code и передаём её методу getUrl. Если метод getUrl возвращает URL, то перекидываем туда и завершаем скрипт, иначе же перекидываем на главную страницу.
Сейчас, чтобы всё работало, нам нужно передавать ссылку такого вида:
http://localhost/test/index.php?code=1jsch/
что не очень-то удобно. Чтобы это исправить и сделать ЧПУ ссылку, мы прописываем регулярное выражение в файл .htaccess.
Вот и всё. Мы закончили создание нашего сокращателя URL. Хоть он получился и несложным, но, думаю, вы многое узнали и поняли, сможете ли написать его сами. Если нет, то значит вам ещё нужно тренироваться в написании php скриптов. Удачи!
-
-
Михаил Русаков
Комментарии (7):
Здравствуйте. Полезная статья, спасибо! Только возник вопрос. Когда ссылка генерируется, то при клике на неё попадаешь на локалхост, как сделать так, чтобы переходя по ссылке сгенерированной пользователь переходил куда задумано? https://yadi.sk/i/4D8InSLqeYB2w
Ответить
выучить php,для начала =) А иначе и лезть не стоит. Это ведь не сервис для сокращения ссылок создаётся,а просто сокращатель ссылок. В коде localhost замените на нужный вам домен
Ответить
В том то и дело, что пробовал менять на тот домен, где этот скрипт, но все равно неверно! Если это просто сокращатель ссылок, то это значит, что он не должен работать?))
Ответить
а что не верно? не переадресовывает на сокращённую ссылку?)
Ответить
Да
Ответить
У меня тоже такая проблема. Все скопировал как тут, в бд все попадает, а редеректить не хочет. Это как всегда Михаил ошибся)
Ответить
Спасибо за статью. Хочу отметить несколько моментов. Если ссылки добавляются в базу данных, но не работает на перенаправление и перенаправляет на {$url}, то необходимо заменить скобочки на 8 строке в redirect.php То есть, чтобы было не header('Location: {$url}'); а header("Location: {$url}"); Так же, если надо чтобы перенаправляло при вводе неверного id не на index.php, а просто на главную страницу сайта, то достаточно просто поменять в том же redirect.php 13 строку с header('Location: index.php'); на header('Location: .');
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.