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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
学习php设计模式 php实现状态模式
2015/12/07 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
详谈javascript异步编程
2016/02/21 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
如何在Python中编写并发程序
2016/02/27 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
python3多线程知识点总结
2019/09/26 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
五十岁生日宴会答谢词
2014/01/15 职场文书
大学学习生活感言
2014/01/18 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
竞聘上岗演讲
2014/05/19 职场文书
大学新闻系自荐书
2014/05/31 职场文书
体现团队精神的口号
2014/06/06 职场文书
汽车转让协议书范本
2014/12/07 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python