首頁 > 後端開發 > php教程 > 请问这样的短网址是怎么做到发号的

请问这样的短网址是怎么做到发号的

WBOY
發布: 2016-06-06 20:34:19
原創
1134 人瀏覽過

测试在这 http://nh.gs/

我连续生成网址得到
http://nh.gs/4hm
http://nh.gs/con

base62后
4hm => 16452
con => 47639

传统的都是生成5到6位的,这个应该是自增的,但是为什么连续生成的经过base62后数值却差这么多,按理是连续的,我想应该是使用了某种方法防止并发重复生成,这是这个短网址源码的下载地址http://pan.baidu.com/s/1pJ4zLDD

我分析了源码但找不到生成的核心,百度谷歌也找遍了,所以来此请教大神帮帮忙(⊙0⊙)

回复内容:

测试在这 http://nh.gs/

我连续生成网址得到
http://nh.gs/4hm
http://nh.gs/con

base62后
4hm => 16452
con => 47639

传统的都是生成5到6位的,这个应该是自增的,但是为什么连续生成的经过base62后数值却差这么多,按理是连续的,我想应该是使用了某种方法防止并发重复生成,这是这个短网址源码的下载地址http://pan.baidu.com/s/1pJ4zLDD

我分析了源码但找不到生成的核心,百度谷歌也找遍了,所以来此请教大神帮帮忙(⊙0⊙)

Uploads/Web/Lib/Action/IndexAction.class.php 第 268 行.

<code>            $data['tinyurl'] = getfreetiny($model->field('tinyurl')->select());
</code>
登入後複製

getfreetiny 定义在 Uploads/Web/Common/common.php 中第 33 行.
getfreetiny 函数中有调用 它上面的(第22行) get_tinyurl 来根据getfreetiny中生成的随机数转换为对应的字符串.

所以结论是那个数字是随机生成的. 所以你才会看到相差这么大的结果.

大概看了一下源码,在 ApiAction.class.php 中找到几句

<code>php</code><code>    public function thirdapi()
    {
        $method = trim($_GET['api']);
        $url = trim($_POST['url']);
        $url = empty($url) ? 'http://www.baidu.com': $url;
        if($method=='dwz')
        {
            $baseurl  = "http://dwz.cn/create.php";
            $data=array('url'=>$url);
        }
</code>
登入後複製

所以估计是调用的 dwz.cn 的 API 来生成的,不是自己实现的算法。

重複就重複唄

首先重複的概率很小

其次就算重複了也可以再重新生成

就醬紫。

<code>do {
    生成隨機數
} while (重複)
</code>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板