美文网首页
php 生成短链接

php 生成短链接

作者: coslight | 来源:发表于2020-04-17 15:00 被阅读0次

    根据需求 - 选择自己生成短域名还是利用第三方api获得

    自己生成短链接

    注意:中心思想"域名转发"
    既然是域名转发,所以我们需要两个域名
    域名一:项目域名「www.a1.com」
    域名二:中间域名「www.a2.com」

    www.a1.com代码块「mvc框架,根据自己的框架调整代码」
    class Api extends Base
    {
        /**
         * 需要生成短连接的方法
         * @return string
         */
        public function indexAction()
        {
             $code = $_GET['psid'];
             $url =  'http://www.a1.com/api/index?psid=' . base64_encode($code); //有需要加密的参数,加密一下
             $shorturl = $this->urlShort($url);
             echo $shorturl;exit;
        }
    
        /**
         * 生成短链接方法
         * @return string
         */
        private function urlShort($url)
        {
            // 以下代码利用php函数生成短连接
            $do_url = crc32($url);
            $result = sprintf("%u", $do_url);
            $sUrl = '';
            while ($result > 0) {
                $s = $result % 62;
                if ($s > 35) {
                    $s = chr($s + 61);
                } elseif ($s > 9 && $s <= 35) {
                    $s = chr($s + 55);
                }
                $sUrl .= $s;
                $result = floor($result / 62);
            }
            // 把生成的短链接存储到redis里面「建议设置存储时间」
            self::$redis->set($sUrl, $url);
            // 设置短域名为:http://yoururl.com/「自己购买的域名」
            $data = 'http://www.a2.com/' . $sUrl;
            return $data;
        }
    
        /**
         * 返回短网址数据 暂不存库
         * @return string
         */
        public function geturlAction()
        {
            $dos = $_POST['dos'];
            die(self::$redis->get($dos));
        }
    }
    
    www.a2.com代码块「未使用框架,根据自己的框架调整代码」
    <?php
    // 获取redis存储的域名
    if($_SERVER['REQUEST_URI']){
        // 正则去掉微信在链接后面加了参数
        $str = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
        $path=explode("/",$str);
        if(isset($path[1]) && $path[1]){
            $res = getShareSums($path[1]);
            if($res){
                $url=$res;
            }
        }
    }
    
    // 跳回长链接
    header("Location: ".$url);
    exit;
    
    // 调用www.a1.com里面geturl接口获取到长链接
    function getShareSums($dos){
        $datastr = "dos={$dos}";
        $url = "www.a1.com/api/geturl";
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_POST,TRUE);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$datastr);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
        $new_url = curl_exec($ch);
        curl_close($ch);
        return $new_url;
    }
    
    ?>
    

    利用第三方接口生成短链接

    1.百度生成短链接接口
    https://dwz.cn/console/apidoc

    相关文章

      网友评论

          本文标题:php 生成短链接

          本文链接:https://www.haomeiwen.com/subject/lwlevhtx.html