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 相关文章推荐
PHPMailer 中文使用说明小结
Jan 22 PHP
apache+php+mysql安装配置方法小结
Aug 01 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
PHP小教程之实现链表
Jun 09 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 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初学者最感迷茫的问题小结
2010/03/27 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Python实现Restful API的例子
2019/08/31 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
python中封包建立过程实例
2021/02/18 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
调解员先进事迹材料
2014/02/07 职场文书
给老师的一封建议书
2014/03/13 职场文书
作文评语集锦大全
2014/04/23 职场文书
周一给客户的问候语
2015/11/10 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
Python实现打乒乓小游戏
2021/09/25 Python
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle