Решил написать сервис коротких ссылок. БД: [sql]CREATE TABLE IF NOT EXISTS `shorturl` ( `id` int(6) NOT NULL AUTO_INCREMENT, `s_long_url` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;[/sql] .htaccess Код (Text): RewriteEngine on RewriteRule ^([a-z_A-Z_0-9]+)$ index.php?url=$1 файл index.php PHP: <? //Функция для создания короткой записи: function encodeID($id) { $chars = '23456789abcdeghkmnpqsuvxyzABCDEGHKLMNPQSUVXYZ'; $length = strlen($chars); $hash = ''; while($id > $length - 1) { $hash = $chars[fmod($id, $length)].$hash; $id = floor($id/$length); } return $chars[$id].$hash; } //Функция для получения id записи в базе по короткой ссылке: function decodeID($string) { $chars = '23456789abcdeghkmnpqsuvxyzABCDEGHKLMNPQSUVXYZ'; $length = strlen($chars); $size = strlen($string) - 1; $array = str_split($string); $id = strpos($chars, array_pop($array)); foreach($array as $i => $char){ $id += strpos($chars, $char) * pow($length, $size - $i); } return $id; } if (isset($_POST['long_url']) || !empty($_POST['long_url'])) { mysql_select_db('shorturl',mysql_connect('localhost','root','')); $long_url = mysql_real_escape_string($_POST['long_url']); mysql_query('INSERT INTO shorturl VALUES("","'.$long_url.'")'); $id = mysql_insert_id(); mysql_close(); $short_url = encodeID($id); echo 'Ваша ссылка: [url=http://'.$_SERVER]http://'.$_SERVER[/url]['SERVER_NAME'].'/'.$short_url; } elseif (isset($_GET['url']) || !empty($_GET['url'])) { mysql_select_db('shorturl',mysql_connect('localhost','root','')); $id = decodeID($_GET['url']); $res = mysql_query('SELECT s_long_url FROM shorturl WHERE id="'.$id.'"'); $long_url = mysql_result($res,0); mysql_close(); header('location: '.$long_url); } echo '<form action="?" method="post">Ваш URL: <input type="text" name="long_url" value="http://"/> <input type="submit" value="Создать ссылку"/></form>'; ?> Жду комментариев. Что улучшить, что подправить, или вообще удалить и не стоит марать php.ru такой писаниной
Если выкинуть использование заглавных, то можно обойтись http://ru2.php.net/manual/en/function.base-convert.php
И... Конечно, ИМХО, но такие сервисы неплохо бы делать устойчивыми от "перебора" всех хранимых в базе ссылок. Этот вариант такой устойчивости не имеет.
Куда уж подробнее. Не давать возможности простым перебором чисел в запросе получить всю базу. Кому нужна она или нет - это уже второй вопрос, может для кого не критично, по-этому я и поставил ИМХО.