До запуска сервиса коротких собщений осталось совсем немного: определиться с хранением информации, настроить .htaccess и переадресацию.
Ссылка на архив TinyURL для нетерпеливых (Инструкция по установке и ссылка на пример работающего скрипта в конце статьи)
Для кодирования, как я уже упоминал раньше будет испльзовано множество символов [A-Za-z0-9], которое позволяет получить чуть меньше полутора миллионов уникальных кодов. Неразуно хранить такой объем данных в одном файле, а потому я разобью код на две равные части, первая из которых будет служить именем файла, а вторая индексом массива, который в этм файле сохранен. То есть код aF0k, говорит о том, что надо загрузить файл с именем aF и найти в нем элемент с индексом 0k
Подобное разбиение теоритически должно дать существенный прирост в скорости (по сравнению с вариантом хранения всех данных в одном массиве), а как это будет работать на практике, я смогу рассказать несколько позже, когда скрипт покажет себя в деле.
Итак, функция получения случайного кода и сохранения пльзовательской ссылки.
function tinyurl_addurl($url) { global $tinyurl_key; global $tinyurl_base; $len = 2; //magic number - filename/index length $fname = tinyurl_encode( @include("urls/$fname.php"); { $index = tinyurl_encode($tinyurl_key, $cnt, $len); $_array[$index] = $url; $res = $fname . $index; arraytofile($_array, "urls/$fname.php"); } return $res; }
Обработка пользовательского события при добавлении нового адреса. При добавлении адреса происходит его проверка на валидность с помощью регулярного выражения, которое в случае необхдимости нужно изменить на более подходящее.
'!(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?!i', $url)) { $json['err'] = 'Неверный формат URL'; $json['status'] = 'FAILED'; break; } $lnk = ''; while($lnk == '') { $lnk = tinyurl_addurl($url); } $json['lnk'] = 'http://' . $_SERVER['SERVER_NAME'] $json['status'] = 'SUCCESS';
В примере для хранения файлов со ссылками жестко задана папка urls, что естественно можно изменить. Во избежание лишних проблем не рекомендую сваливать эти файлы в корневую директорию, тем более, что для работы скрипта на нее требуется установить права на запись.
Теперь перейдем к поиску ссылки по ее коду и перенаправлению пользователя если таковая найдена
{ } { $fname = "urls/{$keys[0]}.php"; { @include($fname); { } } }
Немного шаманства c .htaccess (я разместил сервис в папке tinyurl - отсюда и значение RewriteBase) ...
AddHandler application/x-httpd-php .php .html php_flag magic_quotes_gpc 0 php_flag magic_quotes_runtime 0 php_flag register_globals off RewriteEngine on RewriteBase /tinyurl/ Options -Indexes Options +FollowSymlinks RewriteCond %{THE_REQUEST} !^(.+)(index|ajax)\.php(.*)$ RewriteRule .* index.php
... настройка пользовательской формы, незначительное причесывание кода и сервис готов.
То, что получилось, качаем здесь.
Установка
P.S. Сегодня обнаружил, что у меня неправильно настроена RSS лента. Все исправил, так что подписывайтесь - впереди еще много интересного.
TinyURL. Шаг 4. Обработка кнопки на примере формы входа
TinyURL. Шаг 3. Рендеринг интерфейса
TinyURL. Шаг 2. Кодирование и декодирование ссылки
Разноцветное облако ссылок
Установка собственного OpenID сервера phpMyID
Комментарии:
Немного странно писать комментарии самому себе, но это самый удобный способ передать пару ссылок с работы домой, или обратно.
http://www.codenothing.com/archives/jquery/inline-text-edit/
http://blog.termit.name/jquery/
P.S. Надо бы переписать эту форму.
Еще одна полезная ссылка. На сей раз об использовании canvas
http://www.linkexchanger.su/2009/86.html
Очередное изменение в системе комментирования и очередная проверка.
Спасибо за скрипт
Ну, нифига и этот скрипт бесплатно??? Вот уж не ожидал, что так подфартит. Дело в том, что я поднял несколько доменов в сервисах, где стоит подобный скрипт и там в этих сервисах показатели солидные тИЦастые и PRистые домены короче.
Вот я и планировал организовать у себя на сервере нечто подобное, но не знал где купить этот скрипт. А тут на тебе! Ну, спасибо дружище! Как подыму деньжат с этой затеи обязательно сделаю тебе символический подгон в виде нескольких баксов..
Согласен, скрипт классный, а тиц и пр у подобных велик.
Вот только разрекламировать сервис сначала понадобится
Установил все вроде ровно, но почему-то не только не пашет, но и на 404 отправляет. Может хостер быкует по этому поводу?
Проверь поддержку htaccess у хостера
За скрипт огромное спасибо! Сейчас будем пробовать.
Добавить комментарий: