Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 理解url缩短器函数_Php_Mysql_Math_Base64 - Fatal编程技术网

Php 理解url缩短器函数

Php 理解url缩短器函数,php,mysql,math,base64,Php,Mysql,Math,Base64,我试图更好地理解函数是如何工作的。我不熟悉下面的函数是如何工作的,我一直在寻求一些帮助和可能的解释。我得到了大部分,除了一部分使用了数学函数,比如floor()。最让我困惑的是do…while循环。使用$id、floor()和$base如何将长url转换为短url?另外,它在需要执行do…while循环的地方迭代到底是什么 $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $base = str

我试图更好地理解函数是如何工作的。我不熟悉下面的函数是如何工作的,我一直在寻求一些帮助和可能的解释。我得到了大部分,除了一部分使用了数学函数,比如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";
}
如果有人能提供一个没有大量数学术语的解释,我将不胜感激。谢谢


我从以下位置获得该函数:

它只是base64的自定义实现(或多或少)。它只使用
$chars
中的字符集,因此它没有
/
+
s


一个大整数进入。循环不断地将其划分为62的倍数,并从
$chars
集合中选择相应的字母/数字。

您可能只习惯于考虑其中包含0到9的数字。如果我们有12根手指而不是10根,会发生什么?也许我们会在9之外再做一个数字

在您的代码中,数字系统中有62个不同的“数字”。你开始用“a”,然后是“b”,然后是“c”,以此类推。当你用完它们时,你开始使用两个数字——“aa”,然后“ab”,直到你用完它们。。。然后再加一个数字

当您创建一个新的缩短的URL时,您将其插入到数据库中,它会得到一个“id”号。该函数将其从10位数字(称为“基数10”)转换为64位数字


当您想要访问一个URL时,您可以转换回base 10,在数据库中查找它,然后将它返回给用户

谢谢你的帮助。我想我对它有了更好的理解。