PHP URL Shortener

时间:2012-04-24 09:38:02

标签: php

我已经阅读了关于这个主题的大约5-10个不同的帖子,但没有一个给出一个明确的例子。他们解释了背景故事。

  1. 我有一个MySQL数据库,其中包含从“1”到“500000”
  2. 的记录
  3. 我希望URLS基于这些记录ID号
  4. 我希望网址保持3-5个数字之间的常数
  5. 示例:

    http://wwwurl.com/1将为http://wwwurl.com/ASd234s 再次 http://wwwurl.com/5000000将是http://wwwurl.com/Y2v0R4r

    我能否获得一个明确的功能代码示例来完成这项工作,谢谢。

2 个答案:

答案 0 :(得分:0)

一个非常愚蠢的例子 - 使用例如substr(md5($id), 10, 15),其中$ id是您的1-500000记录ID号。在32个字符的哈希码中,在位置10和15之间生成相同哈希的概率(但您也可以使用位置24-28等)限制为零...

保存映射ID< - >也会更好。 HASH到DB表,可以轻松找到基于URL的相关记录。

整个源代码 - 基于URL的哈希创建,URL重写,映射保存和记录检索是一个非常复杂的问题,可以在数千种变体中实现,主要取决于程序员的技能,经验以及他正在实施的系统这进入......

答案 1 :(得分:0)

要将id编号减少为较短的字符串,请转换为base 35 ....

 $short_id=base_convert($id, 10, 35);

如果你想让它更难以预测序列是什么,请将其填充并用已知字符串填充xor:

 function shortcode($id)
 {
   $short_id=str_pad($short_id, 4, '0', STR_PAD_LEFT);
   $final='';
   $key='a59t'; // 500000 = 'bn5p'
   for ($x=0; $x<strlen($short_id); $x++) {
     $final=chr('0') | (ord(substr($short_id, $x, 1)) ^ ord(substr($key, $x, 1));
   }
   return $final;
 }

要获得原始身份证,请撤消该流程。