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 程序员应该使用的10个组件
Oct 31 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
PHP单态模式简单用法示例
Nov 16 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
php使用json-schema模块实现json校验示例
Sep 28 PHP
Laravel 前端资源配置教程
Oct 18 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python计算两个地址之间的距离方法
2018/06/09 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
医学生职业生涯规划书范文
2014/03/13 职场文书
家长会学生演讲稿
2014/04/26 职场文书
护士长竞聘演讲稿
2014/04/30 职场文书
民事诉讼代理词
2015/05/25 职场文书
学历证明范文
2015/06/16 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
TV动画《间谍过家家》公开PV
2022/03/20 日漫
Nginx的基本概念和原理
2022/03/21 Servers
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫