php 自定义生成短链工具

21 篇文章 2 订阅
5 篇文章 0 订阅

因为公司的需求,需要发送推广链接到短信,一开始都是调用别人的链接,后面发现经常有链接失效的情况,极其不稳定,后面索性改成自己的域名来弄。话不多说,上代码:

后端链接生成,我这里是thinkphp6框架:

<?php
namespace app\admin\controller;
use think\Controller;
use think\Validate;
use think\facade\Request;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;

//整个链接管理,增删改查的相关代码
class System extends Base
{     
    //用户id   
    protected $uid;    
    public function __construct()
    {
        $this->uid = session::get('userdata.users_id');
    }

    /*
       链接详情
     */
    public function index()
    {
    	//传入分页值
        $p = empty($_GET['page']) ? 1 : $_GET['page'];
        //每页显示条数
        $num = empty(Request::param('num')) ? 10 : Request::param('num');
        //查询题目类型 & 分页,总条数
        $count = Db::table('zdb_url')->count();
        $info = Db::table('zdb_url')->paginate($num,$count);

        return view('system',[          
            'p' => $p, //显示第几页
            'num' => $num,  //每页显示条数             
            'page' => $info->render(),  // 获取分页显示      
            'pageshow' => pageShow($count,$num,$p), //总记录数,每页显示条数
            'info' => $info //将查询结果赋值给info
        ]);   
    }        

    /*
      添加链接详情
     */
    public function addSystem()
    {
        if(Request::param('html') == false){
            $info = Request::param(); //接收值 
            //数据验证     
            $validate = new Validate;
            $validate->rule([               
                'ur_link|链接' => 'require|unique:zdb_url',
                'ur_info|备注' => 'require' 
            ]);          
            if(!$validate->check($info)){
                //打印错误规则,并返回页面           
                return json(['info'=>$validate->getError(),'status'=>0]); 
            }

            //重点 编码生成
            $key_str = "abcdefghijklmnopqrstuvwxyz1234567890";
            $ur_code = substr(str_shuffle($key_str),mt_rand(0,strlen($key_str)-11),4);
                        
            $data = [
                'ur_code' => $ur_code,
                'ur_link' => $info['ur_link'],
                'ur_info' => $info['ur_info'],
                'ur_time' => time()
            ];
            $result = Db::table('zdb_url')->insert($data); //插入数据
            if($result){        
                addLog($this->uid,'链接详情'.$info['ur_link']);     
                return json(['info'=>'添加成功!','status'=>1]);           
            }else{
                return json(['info'=>'添加失败!','status'=>0]);  
            }
        }else{          
           
            return view('addSystem');
        }
    }

    /*
     *编辑链接详情
     */
    public function editSystem()
    {       
        if(Request::param('html') == false){
            $info = Request::param(); //接收值            
            //数据验证     
            $validate = new Validate;
            $validate->rule([
                'ur_link|链接' => 'require',
                'ur_info|备注' => 'require'
            ]);          
            if(!$validate->check($info)){
                //打印错误规则,并返回页面
                return json(['info'=>$validate->getError(),'status'=>0]); 
            }
  
            $data = [
                'ur_link' => $info['ur_link'],
                'ur_info' => $info['ur_info']
            ];
            $result = Db::table('zdb_url')->where('ur_id',$info['ur_id'])->update($data); 
            if($result > 0){                         
                addLog($this->uid,'编辑ID为'.$info['ur_id'].'的链接详情');     
                return json(['info'=>'编辑成功!','status'=>1]);
            }elseif($result === 0){
                return json(['info'=>'你没有做任何修改哟!','status'=>0]);              
            }else{
                return json(['info'=>'编辑失败!','status'=>0]);  
            }
        }else{
            
            $data = Db::table('zdb_url')->where('ur_id',Request::param('id'))->find();
            return view('editSystem',[
                'data' => $data,
            ]);                         
        }
    }
   

    /*
      删除链接详情
     */
    public function delSystem()
    {
        //单个删除还是批量删除
        if(Request::param('all') == '1'){
            $id = Request::param('id'); //接收id值
            $result = Db::table('zdb_url')->where('im_id',$id)->delete();
            if($result){
                Db::query('alter table `zdb_url` AUTO_INCREMENT = 1'); //重定义自增字段 
                addLog($this->uid,'删除ID为'.$id.'链接详情');     
                return json(['info'=>'删除成功!','status'=>1]);
            }else{
                return json(['info'=>'删除失败!','status'=>0]);
            }
        }else{
            //批量删除
            $id = Request::param('id/a'); //接收id值   
            if($id == ''){
                return json(['info'=>'请选择要删除的数据!','status'=>0]);
            }
            if(is_array($id)){//判断id是数组还是一个数值
                $ids = implode(',',$id);    
                $arr[] = ['im_id','in',$ids];  
            }else{  
                $arr[] = ['im_id','=',$id];  
            }            
            $list = Db::table('zdb_url')->where($arr)->delete();     
            if($list !== false){          
                Db::query('alter table `zdb_url` AUTO_INCREMENT = 1'); //重定义自增字段
                addLog($this->uid,'删除ID为'.implode(',',$id).'的链接详情'); 
                return json(['info'=>'成功删除'.$list.'条数据!','status'=>1]);       
            }else{
                return json(['info'=>'数据删除失败啦!','status'=>0]);
            }    
        }
    }
    
}

后端界面:

前端访问时的代码:

<?php
header("Content-Type:text/html;charset=utf-8");
$key = $_GET['id'];
echo "<title>正在跳转...</title>";
if (trim(empty($key))) {
    //没有后缀的时候直接跳到官网首页
    header("Location:http://your.site.com");
    //echo "链接不存在1";
}else{
    //@parameter 数据库地址,用户名,密码,所连接的数据库
    $link = mysqli_connect("127.0.0.1","root","123456","your_table");
    //连接错误时的信息
    if(mysqli_connect_error($link))
    {    
        exit(mysqli_connect_error());
    }
    //设置字符编码    
    mysqli_set_charset($link,"set names utf8");

    //查询数据库,通过KEY获取长链接进行跳转
    $sql = "SELECT ur_link FROM `zdb_url` WHERE `ur_code` = '$key'";

    //如果存在,则解析出长链接并跳转
    if($result = mysqli_query($link,$sql)){
        while($obj = mysqli_fetch_object($result))
        {
            //echo $obj->ur_link."<br>";
            header("Location:".$obj->ur_link);
        }
        
        // 释放结果集合
        mysqli_free_result($result);
    }else{
        echo "链接不存在2";
    }
}
//关闭连接
mysqli_close($link);

?>

重点来了,我的是nginx,需要配置伪静态,我的环境是宝塔面板:

rewrite ^/(.*)$ /index.php?id=$1 last; 

如果是apache环境的话就在根目录下 .htaccess 文件中添加

#Apache规则:

RewriteRule ^/(.*)$ /index.php?url=$1 [L]

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值