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中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
php GUID生成函数和类
Mar 10 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
thinkPHP事务操作简单案例分析
2019/10/17 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
ionic3 懒加载
2017/08/16 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
Vue进度条progressbar组件功能
2018/04/17 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
python实现类的静态变量用法实例
2015/05/08 Python
python如何查看系统网络流量的信息
2016/09/12 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
如何将json数据转换为python数据
2020/09/04 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
办公室主任竞聘演讲稿
2014/05/15 职场文书
购房委托书
2014/10/15 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书