Короткие url (mysql + php)

В интернете, множество сайтов, где используются короткие ссылки. Например youtube, tinyurl и подобные. Ссылка вида: http://www.youtube.com/watch?v=N98cpA5hdI0 куда приятнее чем было бы http://www.youtube.com/watch?v=23450928230945820532. Так же использование коротких ссылок необходимо если мы не хотим чтобы наш сайт легко парсили.
Очень часто начинающие программисты пытаются создать ссылки подобного вида на своих сайтах. Но делают это совсем странным способом, обычно создают строку со случайной последовательностью, проверяют есть ли уже подобная в базе данных, если есть создают новую и опять проверяют. Это очень дорогой подход и в базе данных у нас каша из набора символов. Не спорю, это тоже решение, очень даже верное, но не оптимальное. Обычно приходят к такому решению начитавшись форумов, сайтов с ответами или через поиск в том же гугл.
Оптимальное решение: использовать mysql в привычном виде, создать поле id типа int \ bigint, и использовать auto_increment для данного поля. Многие думают, что вдруг индекс будет огромным и выйдет за пределы, это напрасные опасения. Если логика программы верная, просто не получится дойти до границ int/bigint.

Но как же появятся короткие ссылки?
Использовать base62 с небольшим изменением, например мы хотим ссылку вида XXXXX, для этого достаточно прибавить произвольное значение к вашему id из базы данных.

class BaseConv {
  private static $base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  public static function Base10($value, $b = 62) {
    if (!preg_match("/^[a-zA-Z0-9]+$/", $value)) return -1;
    $limit = strlen($value);
    $result = strpos(static::$base, $value[0]);
    for($i = 1; $i < $limit; $i++) {
      $result = $b * $result + strpos(static::$base, $value[$i]);
    }
    return $result;
  }
  public static function BaseX($value, $b = 62) {
    $r = $value  % $b;
    $result = static::$base[$r];
    $q = floor($value / $b);
    while ($q) {
      $r = $q % $b;
      $q = floor($q / $b);
      $result = static::$base[$r].$result;
    }
    return $result;
  }
}

function idToUrl($id) {
  return BaseConv::BaseX(100000000000 + $id);
}

function idFromUrl($id) {
  return BaseConv::Base10($id)-100000000000;
}

Этот простой код поможет в ваших начинаниях. А если хочется чтобы каждая ссылка была из уникального набора символов, достаточно перемешать биты по маске и изменить порядок в базовом наборе символов.
Дальше простор для вашей фантазии.

Полезные инструменты для повседневной работы

Работая над проектами и заказами скапливается гора информации, куча пометок, набросков. И всё это теряется на и так переполненном рабочем столе. Не так давно мне один знакомый (из весьма знаменитой компании) посоветовал опробовать сервис Trello. Изначально я отнеся скептически, ведь уже был опыт работы с разными системами в том числе и багтрекерными. Но он настоял, чтобы я попробовал. В итоге делюсь с вами положительными впечатлениями от двух недель работы с системой.

Сама система это просто стикеры, которые можно лепить на доску, их можно двигать, менять, кидать в корзину, объединять в группы. Так же можно ставить на них метки, добавлять списки и вычеркивать из них завершенные задачи. В общем это оказался уникальный и удобный инструмент. Который поможет в любых задачах где требуется строгий график и последовательность работы. Так же он позволяет работать командам над своими творческими творениями. График развития моих проектов теперь стал аккуратным и стало видно как и куда развивается каждый проект.

Рекомендую: Сайт trello.com