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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
获得Google PR值的PHP代码
Jan 28 PHP
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
php 动态添加记录
Mar 10 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
php上传文件问题汇总
Jan 30 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 PHP
PHP基本语法实例总结
Sep 09 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP获取HTTP body内容的方法
Dec 31 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教程 预定义变量
2009/10/23 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
arguments对象
2006/11/20 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
python基于ID3思想的决策树
2018/01/03 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
python集合是否可变总结
2019/06/20 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
售后服务承诺书
2014/03/26 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
课外活动实习计划
2015/01/19 职场文书
暂住证明怎么写
2015/06/19 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书