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 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
防止用户利用PHP代码DOS造成用光网络带宽
Mar 01 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php验证手机号码
Nov 11 PHP
PHP中类的继承和用法实例分析
May 24 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
PHP实现八皇后算法
May 06 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 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
如何在PHP中使用Oracle数据库(5)
2006/10/09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
简化版的vue-router实现思路详解
2018/10/19 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
python 类之间的参数传递方式
2019/12/20 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
Python基于template实现字符串替换
2020/11/27 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
汇科协同Java笔试题
2012/03/31 面试题
实习教师自我鉴定
2013/09/27 职场文书
人事行政主管岗位职责
2013/12/22 职场文书
广播体操口号
2014/06/18 职场文书
个人存款证明书
2014/10/18 职场文书
统计员岗位职责范本
2015/04/14 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL