大揭秘:短网址的工作原理

短网址的发展历史其实不长,他的出现主要是基于微博、短博客、移动营销的崛起而发展起来的。在这些环境中,过长的网址使得用户视觉体验度极差,所以有必要将很长的网址进行缩短。那么网址缩短的原理是什么呢?下文将简要介绍一下。

  1、将原网址通过MD5转化成一串小字母,这种方法简单,但是这种算法是不可逆的,所以别想着直接反转短地址,如果你想深入了解这种算法,可以百度“MD5”+”网址缩短”

  2、数据库类型的存储式,通过给每个长网址自动分配ID和CODE来实现网址的转换,然后当用户访问时,通过查询数据里面ID和CODE对应的原网址,实现实时跳转。这种方式是可逆的,而且便于管理和统计,目前主流的网址缩短程序都是应用的这种方式,如:phurl,yourl,suo.nz网址缩短。



  PHP实现网址缩短的代码如下:

  function get_last_number() {

  $db_result = mysql_query("SELECT last_number FROM ".DB_PREFIX."settings") or db_die(__FILE__, __LINE__, mysql_error());

  $db_row = mysql_fetch_row($db_result);

  return $db_row[0];

  }

  function increase_last_number() {

  mysql_query("UPDATE ".DB_PREFIX."settings SET last_number = (last_number + 1)") or db_die(__FILE__, __LINE__, mysql_error());

  return (mysql_affected_rows() > 0) ? true : false;

  }

  function code_exists($code) {

  $db_result = mysql_query("SELECT COUNT(id) FROM ".DB_PREFIX."urls WHERE BINARY code = '$code'") or db_die(__FILE__, __LINE__, mysql_error());

  $db_row = mysql_fetch_row($db_result);

  return ($db_row[0] > 0) ? true : false;

  }

  function alias_exists($alias) {

  $db_result = mysql_query("SELECT COUNT(id) FROM ".DB_PREFIX."urls WHERE BINARY alias = '$alias'") or db_die(__FILE__, __LINE__, mysql_error());

  $db_row = mysql_fetch_row($db_result);

  return ($db_row[0] > 0) ? true : false;

  }

  function url_exists($url) {

  $db_result = mysql_query("SELECT id, code, alias FROM ".DB_PREFIX."urls WHERE url LIKE '$url'") or db_die(__FILE__, __LINE__, mysql_error());

  if (mysql_num_rows($db_result) > 0) {

  return mysql_fetch_row($db_result);

  }

  return false;

  }

  function generate_code($number) {

  $out = "";

  $codes = "abcdefghjkmnpqrstuvwxyz23456789ABCDEFGHJKMNPQRSTUVWXYZ";

  while ($number > 53) {

  $key = $number % 54;

  $number = floor($number / 54) - 1;

  $out = $codes{$key}.$out;

  }

  return $codes{$number}.$out;

  }

  function insert_url($url, $code, $alias) {

  mysql_query("INSERT INTO ".DB_PREFIX."urls (url, code, alias, date_added) VALUES ('$url', '$code', '$alias', NOW())") or db_die(__FILE__, __LINE__, mysql_error());

  return mysql_insert_id();

  }

  function update_url($id, $alias) {

  mysql_query("UPDATE ".DB_PREFIX."urls SET alias = '$alias' WHERE id = '$id'") or db_die(__FILE__, __LINE__, mysql_error());

  }

  function get_url($alias) {

  $db_result = mysql_query("SELECT url FROM ".DB_PREFIX."urls WHERE BINARY code = '$alias' OR alias = '$alias'") or db_die(__FILE__, __LINE__, mysql_error());

  if (mysql_num_rows($db_result) > 0) {

  $db_row = mysql_fetch_row($db_result);

  return $db_row[0];

  }

  return false;

  }

  function get_hostname() {

  $data = parse_url(SITE_URL);

  return $data['host'];

  }

  function get_domain() {

  $hostname = get_hostname();

  preg_match("/.([^/]+)/", $hostname, $domain);

  return $domain[1];

  }