我想实现一个URL缩短器,人们可以自定义缩短的url代码。
在一个简单的网址缩短器中,人们会为长网站获取一个混乱的代码。但在某些情况下,人们可能希望自定义或指定短网址以使其更具可读性和自我解释。例如,url.com/jimhome
而不是url.com/D3aK1
。这会产生两个参数:long url和指定的短url。系统当然需要检查是否使用了短网址。
我研究过How to code a URL shortener?并发现它很好用。
我的想法是:在DB,id,long url,short url中创建3个字段。使用没有自定义的常规请求,按照帖子执行并存储生成的短URL。使用自定义请求,首先检查是否存在,如果不存在,则插入长URL和短URL,但这会破坏ID和short之间的对应关系网址。有更优雅的方式吗?
我不是母语为英语的人,如果你感到困惑,请发表评论。 提前谢谢。
答案 0 :(得分:0)
如果我理解正确,您要避免的问题是每个网址的ID是由mysql自动增量指定的,但自定义网址需要特定的ID。
避免这种情况的最简单方法是以不同方式选择ID。例如,您可以使用当前的unix时间戳并将其用作您的ID。
两个潜在的问题是生成的ID相同(两个并发用户),并且URL比您想要的长。这可以通过以某种任意方式减少数量并在发生冲突时重试来解决。
示例:
//create a unique ID
$ID = time()/100000;
while(tableContains($ID))
$ID++;
insertRow($ID, idToShortURL($ID), $longURL);
这个伪代码只是为了使它更小。如果然后将增加ID,直到它在添加之前是唯一的。
自定义ID类似于:
$ID = urlToID($longURL);//using the method described in your linked question
if(tableContains($ID)
echo 'Error: the custom url is already in use';
else
insertRow($ID, idToShortURL($ID), $longURL);
我希望这不是太模糊,这只是我想到的第一件事。有一百万种合法的方法来实现这一目标。只要您以某种方式选择ID,订单与分配的ID无关,您将避免相关问题。