日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 自定义生成短链工具

發布時間:2024/1/8 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 自定义生成短链工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為公司的需求,需要發送推廣鏈接到短信,一開始都是調用別人的鏈接,后面發現經常有鏈接失效的情況,極其不穩定,后面索性改成自己的域名來弄。話不多說,上代碼:

后端鏈接生成,我這里是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]

總結

以上是生活随笔為你收集整理的php 自定义生成短链工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。