php生成短网址/短链接原理和用法实例分析


Posted in PHP onMay 29, 2020

本文实例讲述了php生成短网址/短链接原理和用法。分享给大家供大家参考,具体如下:

需求

在我们的项目当中,如果需要更好传播我们的活动链接,但是链接太长1来是不美观,2来是太过于“笨重”,例如拼多多,淘宝联盟,他们的推广链接都是有短链接的,还有新浪微博。

但是,这些始终都是别人的,我们调用别人的API进行生成,不稳定,所以可以自己做一个,注册一个稍微短一些的域名就行。

生成源码api.php

<?php
header("Content-type:application/json");

//GET URL
$url = $_GET["url"];

//过滤数据
if (trim(empty($url))) {
  echo "{\"code\":\"1\",\"url\":\"未传入URL\"}";
}else{
  //定义数据库配置
  $dbhost = "xxx";//数据库服务器地址
  $dbuser = "xxx";//数据库账号
  $dbpwd = "xxx";//数据库密码
  $dbname = "xxx";//数据库名

  //连接数据库
  $con = mysql_connect($dbhost,$dbuser,$dbpwd);
  if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }
  mysql_select_db($dbname, $con);

  //检查数据库是否已经存在该URL
  $check = mysql_query("SELECT * FROM 表名 WHERE long_url = '$url'");
  $check_result = mysql_num_rows($check);
  //如果已经存在,则直接返回之前生成的链接
  if ($check_result) {
    while ($row_yicunzai = mysql_fetch_array($check)) {
      $yicunzai_key = $row_yicunzai["dwz_key"];
      //返回KEY
      echo "{\"code\":\"0\",\"url\":\"域名".$yicunzai_key."\"}";
    }
  }else{
    //生成KEY
    $key_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    $key = substr(str_shuffle($key_str),mt_rand(0,strlen($key_str)-11),4);

    //生成短链接
    mysql_query("INSERT INTO lkydwz (long_url, dwz_key) VALUES ('$url', '$key')");

    //返回结果
    echo "{\"code\":\"0\",\"url\":\"域名".$key."\"}";
  }

  //断开数据库连接
  mysql_close($con);
}

?>

访问源码index.php

<?php
header("Content-Type:text/html;charset=utf-8");
//获得当前传过来的KEY
$key = $_GET["id"];
echo "<title>正在跳转</title>";
//过滤数据
if (trim(empty($key))) {
  echo "链接不存在";
}else{
  //解析KEY
  //定义数据库配置
  $dbhost = "xxx";//数据库服务器地址
  $dbuser = "xxx";//数据库账号
  $dbpwd = "xxx";//数据库密码
  $dbname = "xxx";//数据库名
  //连接数据库
  $con = mysql_connect($dbhost,$dbuser,$dbpwd);
  if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }
  mysql_select_db($dbname, $con);

  //查询数据库,通过KEY获取长链接进行跳转
  //检查数据库是否存在该KEY
  $check = mysql_query("SELECT * FROM 表名 WHERE dwz_key = '$key'");
  $check_result = mysql_num_rows($check);
  //如果存在,则解析出长链接并跳转
  if ($check_result) {
    while ($row_long_url = mysql_fetch_array($check)) {
      $long_url = $row_long_url["long_url"];
      // echo "<script>location.href=\"".$long_url."\";</script>";
      header("Location: $long_url");
    }
  }else{
    echo "链接不存在";
  }
}
?>

Apache规则.htaccess

RewriteEngine On
#RewriteBase / 
RewriteRule ^(\w+)$ index.php?id=$1

数据库字段

id(int)自增
dwz_key(varchar)
long_url(text)
creat_time(TIMESTAMP)

php生成短网址/短链接原理和用法实例分析

使用方法

1、访问api.php?url=长链接,即可生成短链接,例如返回JSON

{"code":"0","url":"http://xxx.cn/Hp8R"}

2、新建.htaccess,把上面规则复制进去,保存
3、新建index.php,把上面代码拷贝进去,配置好数据库。访问http://xxx.cn/Hp8R,就会自动跳转到你的长链接

php生成短网址/短链接原理和用法实例分析

PHP 相关文章推荐
改进的IP计数器
Oct 09 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
php中socket的用法详解
Oct 24 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
php递归json类实例
Dec 02 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
基于php判断客户端类型
Oct 14 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
laravel批量生成假数据的方法
Oct 09 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 #PHP
PHP实现获取文件mime类型多种方法解析
May 28 #PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 #PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 #PHP
php与阿里云短信接口接入操作案例分析
May 27 #PHP
PHP开发API接口签名生成及验证操作示例
May 27 #PHP
php+websocket 实现的聊天室功能详解
May 27 #PHP
You might like
php与paypal整合方法
2010/11/28 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
javascript如何创建对象
2016/08/29 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
货代行业个人求职简历的自我评价
2013/10/22 职场文书
司机岗位职责说明书
2014/07/29 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2014年药房工作总结
2014/11/22 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python