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 相关文章推荐
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
php无限遍历目录示例
Feb 21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
8个PHP数组面试题
Jun 23 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
PHP实现rar解压读取扩展包小结
Jun 03 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
php新建文件自动编号的思路与实现
2011/06/27 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
Python 详解基本语法_函数_返回值
2017/01/22 Python
使用Python对Access读写操作
2017/03/30 Python
Python实现识别手写数字大纲
2018/01/29 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
美容院店长岗位职责
2014/04/08 职场文书
简单的辞职信模板
2015/05/12 职场文书
中学图书馆工作总结
2015/08/11 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
JVM之方法返回地址详解
2022/02/28 Java/Android
MySQL优化及索引解析
2022/03/17 MySQL