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生成自己的LOG文件
Oct 09 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
php mysql操作mysql_connect连接数据库实例详解
Dec 26 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
浅谈手写node可读流之流动模式
2018/06/01 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python连接字符串过程详解
2020/01/06 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
十月份红领巾广播稿
2014/01/22 职场文书
《灯光》教学反思
2014/02/08 职场文书
部队万能检讨书
2014/02/20 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
作风转变年心得体会
2014/10/22 职场文书
2015入党自传格式范文
2015/06/26 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
MySQL约束超详解
2021/09/04 MySQL
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
分享几种python 变量合并方法
2022/03/20 Python