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桌面中心(二) 数据库写入
Mar 11 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
基于PHP常用函数的用法详解
May 10 PHP
php分页函数示例代码分享
Feb 24 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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中调用JAVA
2006/10/09 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
python Django连接MySQL数据库做增删改查
2013/11/07 Python
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python将文本转换成图片输出的方法
2015/04/28 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Python如何读写CSV文件
2020/08/13 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
热血教师观后感
2015/06/10 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
python绘制箱型图
2021/04/27 Python
Python基础之常用库常用方法整理
2021/04/30 Python
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server