首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP短程序

PHP短程序
EN

Stack Overflow用户
提问于 2012-04-24 09:38:01
回答 2查看 147关注 0票数 2

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

  1. i有一个MySQL数据库,其记录从"1“到”500000“
  2. ,我希望URL基于这些记录ID号
  3. ,我希望URL保持在3-5位数字

之间的常数。

示例:

http://wwwurl.com/1将再次成为http://wwwurl.com/ASd234shttp://wwwurl.com/5000000将成为http://wwwurl.com/Y2v0R4r

我能得到一个清晰的函数代码来完成这项工作吗,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 12:08:12

若要将id数减少为较短的字符串,请将其转换为基数35.

代码语言:javascript
复制
 $short_id=base_convert($id, 10, 35);

如果您想要更难预测序列是什么,请用已知的字符串填充它并使用xor:

代码语言:javascript
复制
 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;
 }

要拿回原来的身份,只需逆转这个过程。

票数 0
EN

Stack Overflow用户

发布于 2012-04-24 10:03:27

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

最好将ID <->映射保存到DB表中,以便根据URL轻松找到相关记录。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10295328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档