Понимание функции сокращения URL - PullRequest
0 голосов
/ 08 октября 2011

Я пытаюсь лучше понять, как работает функция.Я не знаком с тем, как работает функция ниже, и я искал некоторую помощь и, возможно, объяснение.Я получаю большую часть этого, кроме одной части, которая использует математические функции, такие как floor ().Больше всего меня смущает цикл do ... while.Каким образом использование $ id, floor () и $ base превращает длинный URL в короткий URL?Кроме того, что именно происходит в цикле do ... while, чтобы сделать это?

$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$base  = strlen($chars);     // base 62
$site  = 'http://short.co';  // Replace with your domain

// ...Connect to MySQL server here...

function shorten_url($url)
{
  global $chars, $site, $base;

  $hash  = md5($url); 
  $alnum = NULL; //

  // Check if URL is already exist on db
  // Otherwise add this URL to table
  $res = mysql_query("SELECT id FROM urls WHERE url_hash='$hash'");

  if (mysql_num_rows($res)) {
    $row = mysql_fetch_object($res);
    $id = $row->id;
  } else {
    mysql_query("INSERT INTO urls (url, url_hash) VALUES ('$url', '$hash')");
    $id = mysql_insert_id();
  }

  // Convert id to base 62 and decode to alphanumeric
  do {
    $alnum = $chars[($id%$base)].$alnum;
  } while ($id = floor($id/$base));

  return "$site/$alnum";
}

Если бы кто-то мог дать объяснение без тонны математического жаргона ... Я был бы признателен,Спасибо.

Я получил эту функцию от: http://bsd -noobz.com / blog / how-to-create-url-сокращения-использование-простой-php

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Вы, вероятно, привыкли думать только о числах, которые имеют от 0 до 9 в них. Что бы произошло, если бы у нас было 12 пальцев вместо 10? Может быть, мы бы сделали еще одну цифру, кроме 9?

В вашем коде есть 62 различных "цифры" в вашей системе счисления. Вы начинаете считать с «а», затем «б», затем «с» и так далее. Когда они заканчиваются, вы начинаете использовать две цифры - «aa», затем «ab», пока не исчерпаете их ... затем добавьте еще одну цифру.

Когда вы создаете новый сокращенный URL, вы вставляете его в базу данных, и он получает номер «id». Функция преобразует его из 10-значных чисел (называемых «основанием 10») в 64-значные числа.

Когда вы хотите получить доступ к URL-адресу, вы преобразуете его обратно в базу 10, ищите его в базе данных и передаете его обратно пользователю.

0 голосов
/ 08 октября 2011

Это просто пользовательская реализация base64 (более или менее).Он просто использует набор символов из $chars, поэтому у него нет / и + s.

Входит большое целое число. Циклы продолжают делить его на кратные 62, и выбираетв соответствии с буквой / цифрой из набора $chars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...