php 自定义生成短链工具
生活随笔
收集整理的這篇文章主要介紹了
php 自定义生成短链工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
因為公司的需求,需要發(fā)送推廣鏈接到短信,一開始都是調用別人的鏈接,后面發(fā)現(xiàn)經(jīng)常有鏈接失效的情況,極其不穩(wěn)定,后面索性改成自己的域名來弄。話不多說,上代碼:
后端鏈接生成,我這里是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'];//每頁顯示條數(shù)$num = empty(Request::param('num')) ? 10 : Request::param('num');//查詢題目類型 & 分頁,總條數(shù)$count = Db::table('zdb_url')->count();$info = Db::table('zdb_url')->paginate($num,$count);return view('system',[ 'p' => $p, //顯示第幾頁'num' => $num, //每頁顯示條數(shù) 'page' => $info->render(), // 獲取分頁顯示 'pageshow' => pageShow($count,$num,$p), //總記錄數(shù),每頁顯示條數(shù)'info' => $info //將查詢結果賦值給info]); } /*添加鏈接詳情*/public function addSystem(){if(Request::param('html') == false){$info = Request::param(); //接收值 //數(shù)據(jù)驗證 $validate = new Validate;$validate->rule([ 'ur_link|鏈接' => 'require|unique:zdb_url','ur_info|備注' => 'require' ]); if(!$validate->check($info)){//打印錯誤規(guī)則,并返回頁面 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); //插入數(shù)據(jù)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(); //接收值 //數(shù)據(jù)驗證 $validate = new Validate;$validate->rule(['ur_link|鏈接' => 'require','ur_info|備注' => 'require']); if(!$validate->check($info)){//打印錯誤規(guī)則,并返回頁面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'=>'請選擇要刪除的數(shù)據(jù)!','status'=>0]);}if(is_array($id)){//判斷id是數(shù)組還是一個數(shù)值$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.'條數(shù)據(jù)!','status'=>1]); }else{return json(['info'=>'數(shù)據(jù)刪除失敗啦!','status'=>0]);} }}}后端界面:
前端訪問時的代碼:
<?php header("Content-Type:text/html;charset=utf-8"); $key = $_GET['id']; echo "<title>正在跳轉...</title>"; if (trim(empty($key))) {//沒有后綴的時候直接跳到官網(wǎng)首頁header("Location:http://your.site.com");//echo "鏈接不存在1"; }else{//@parameter 數(shù)據(jù)庫地址,用戶名,密碼,所連接的數(shù)據(jù)庫$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");//查詢數(shù)據(jù)庫,通過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,需要配置偽靜態(tài),我的環(huán)境是寶塔面板:
rewrite ^/(.*)$ /index.php?id=$1 last;如果是apache環(huán)境的話就在根目錄下 .htaccess 文件中添加
#Apache規(guī)則:
RewriteRule ^/(.*)$ /index.php?url=$1 [L]
總結
以上是生活随笔為你收集整理的php 自定义生成短链工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 触摸DevOps,从现在开始DevOps
- 下一篇: 计算机专业游戏本后悔,毕业了,到底要不要