PHP生成短网址方法汇总_php技巧

正常的网址带上参数的那种可能会很长,尤其是我们在印刷纸质品如企业宣传册中要印上某个长的url的话非常难看,而且也没几个人会去记这个网址,虽然现在可以用扫二维码的方式打开长网址。但是人们可以使用短网址来实现优美的链接,尤其是有字数限制的应用如微博。

短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问。

方案1:PHP+MySQl实现短网址的生成和读取

常规的方案我们将生成好的短网址和原网址对应到一张数据表中,然后供读取使用。我们先来看如何生成唯一的短网址。

//生成短网址
function code62($x){
  $show='';
  while($x>0){
    $s=$x % 62;
    if ($s>35){
      $s=chr($s+61);
    }elseif($s>9&&$s<=35){
      $s=chr($s+55);
    }
    $show.=$s;
    $x=floor($x/62);
  }
  return $show;
}
function shorturl($url){
  $url=crc32($url);
  $result=sprintf("%u",$url);
  return code62($result);
}
echo shorturl('http://www.jb51.net/');
//1EeIv2

使用以上PHP代码可以生成唯一的6位的短网址,然后我们将生成的短网址与原网址一起写入到MySQL表中,插入数据库的代码这里我就不写了,这是PHP基础。
接着,我们有一个link.php用来接收读取url并实现真实跳转。

include_once('connect.php'); //连接数据库
$url = $_GET['url'];
if(isset($url) && !empty($url)){
  $sql = "select url from shorturl where codeid='$url'";
  $query = mysql_query($sql);
  if($row=mysql_fetch_array($query)){
    $real_url = $row['url'];
    header('Location: ' . $real_url);
  }else{
    header('HTTP/1.0 404 Not Found');
    echo 'Unknown link.';
  }
}else{
  header('HTTP/1.0 404 Not Found');
  echo 'Unknown link.';
}

代码中,如果得到短网址对应的真实url,会使用header跳转到真实的页面上去,否则返回404代码。这样我们可以使用如: http://yourdomain/link.php?url=xxx来实现短网址访问。

继续,我们使用URL rewrite即重写功能来实现诸如可以通过地址:http://yourdomain/xxx 来访问。

以下是rewrite规则:

#Apache规则:
RewriteRule ^/(.*)$ /link.php?url=$1 [L] 

#如果使用nginx,规则这样写:
rewrite ^/(.*)$ /link.php?url=$1 last;

方案2:PHP+ini实现短网址技术

对于方案1使用数据库的做法好处就是操作方便,而大量短网址查询需要做优化。而方案2则放弃数据库,使用ini配置,我们将短网址和真实网址配置在ini文件中,PHP直接通过parse_ini_file()读取ini文件,几行代码就可以实现短网址的跳转。
links.ini文件像这样配置:

baidu  = https://www.baidu.com/
qq    = http://www.qq.com/
hw    = http://www.hw.com/
dm    = http://www.dm.com/view-blog-362.html

而index.php的代码可以这样写:

$links = parse_ini_file('links.ini'); 

if(isset($_GET['l']) && array_key_exists($_GET['l'], $links)){
  header('Location: ' . $links[$_GET['l']]);
}
else{
  header('HTTP/1.0 404 Not Found');
  echo 'Unknown link.';
}

当然,我们还需要配置下rewrite规则。

#Apache规则:
RewriteRule ^/(.*)$ /index.php?l=$1 [L] 

#如果使用nginx,规则这样写:
rewrite ^/(.*)$ /index.php?l=$1 last;

好了,我们现在访问网址:http://demo.jb51.net/dm,它直接跳转到实际网址:http://www.jb51.net/view-blog-362.html。
相比来说,第二种方案适合小型的应用,你还可以把url地址做成数组形式保存,还可以做一个管理界面专门维护这些短网址。

第三种方案:php版的短链接生成方法

<?php
function shorturl($input) {
$base32 = array (
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', '0', '1', '2', '3', '4', '5'
);

$hex = md5($input);
$hexLen = strlen($hex);
$subHexLen = $hexLen / 8;
$output = array();

for ($i = 0; $i < $subHexLen; $i++) {
//把加密字符按照8位一组16进制与0x3FFFFFFF(30位1)进行位与运算
$subHex = substr ($hex, $i * 8, 8);
$int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
$out = '';

for ($j = 0; $j < 6; $j++) {

//把得到的值与0x0000001F进行位与运算,取得字符数组chars索引
$val = 0x0000001F & $int;
$out .= $base32[$val];
$int = $int >> 5;
}

$output[] = $out;
}

return $output;
}
?>

总结:

用户访问短网址 时的过程:

1、浏览器访问短网址http://short.cn/Xvdf23,经过DNS解析会指向到http://short.cn的服务器。
2、服务器根据短网址中的ID字段查找数据库,返回原始网址。
3、重定向到上面返回的原始网址

以上就是本文的全部内容了,希望大家能够喜欢

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, 短网址
PHP生成短网址
接听电话技巧汇总、excel自动生成汇总表、四川麻将技巧汇总 一、高中化学解题技巧汇总、excel汇总表生成分表,以便于您获取更多的相关知识。

时间: 2024-12-31 08:48:53

PHP生成短网址方法汇总_php技巧的相关文章

php生成唯一数字id的方法汇总_php技巧

关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢? 当然不是,其实有两种方法可以解决. 1. 如果你只用php而不用数据库的话,那时间戳+随机数是最好的方法,且不重复: 2. 如果需要使用数据库,即你还需要给这个id关联一些其他的数据.那就给MySQL数据库中的表的id一个AUTO_INCREMENT(自增)属性,每次插入一条数据时,id自动+1,然后使用mysql_insert_id()或LAST_INS

使用PHP生成二维码的方法汇总_php技巧

随着科技的进步,二维码应用领域越来越广泛,本站之前已有文章介绍通过使用jQuery插件来生成二维码,今天我给大家分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码. 利用Google API生成二维码 Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jb51.net"; generateQRfromGoogle($urlToEncode); /** * google api 二维码

php中的常用魔术方法汇总_php技巧

这篇文章详细的对php中的常用魔术方法进行了整理归纳,分享给大家供大家参考,具体内容如下 1.PHP把所有"__"开头的方法当做魔术方法,所以任何自定义的方法都不能是"__"开头 php提供的重载,是指动态的创建属性或方法.重载是通过魔术方法来实现的.这些魔术方法的参数不能饮用传递,__get(),__set(),__isset(),__unset(),实现类属性重载. 2.当访问类中不可访问的属性时,将调用__get()方法 3.当访问类中不可访问的属性时,根据不

php将数组存储为文本文件方法汇总_php技巧

php 缓存数组形式的变量,实际上就是将 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件.那么如何使用 php 将数组保存为文本格式的文件呢?下面分享三种方法实现将 php 数组写入到文件以缓存数组.(1)利用serialize 将数组序列化存储为文本文件,调用时候再使用unserialize 还原 <?php $file='./cache/phone.php'; $array=array('color'=> array('blue','red',

php获取根域名方法汇总_php技巧

本文实例汇总了php获取根域名方法,分享给大家供大家参考.具体实现方法如下: 如果你只简单获取当前访问你页面的域名,我们只需要使用php中的函数HTTP_HOST就可以搞定了,如果是提取url根域名是需要正则的,下面就来看看几个具体实例. 如果是获取当前域名是非常的简单的: 复制代码 代码如下: <?php //获取当前的域名: echo $_SERVER['SERVER_NAME']; //获取来源网址,即点击来到本页的上页网址 echo $_SERVER["HTTP_REFERER&q

PHP获取当前文件的父目录方法汇总_php技巧

方法一:先获得当前文件所在文件夹的长度,然后用substr来截取掉该长度: 复制代码 代码如下:  $dirName = str_replace("\\", "/", dirname(__FILE__));  $dirNameLength = strlen($dirName);  $currentDirNameLength = $dirNameLength - strrpos($dirName,"/"); //获得当前文件所在文件夹的长度!  $

php中出现空白页的原因及解决方法汇总_php技巧

很多程序员在进行php开发的时候都遇到过出现空白页的请,综合分析来说,在php编程中出现空白页面可能是由以下几个原因造成的: 1.逻辑错误 逻辑错误是最难排除的,从表面上看,也许代码是合法的,是正规的,可运行起来却不是预料之中的.为什么呢?也许是编写者想得不够全面,毕竟人是人,计算机是计算机,计算机不可能完全按照人的思路去运行脚本.在这里,我告诉大家一个比较好的调试方法,就是使用注释符"/* */",注释掉一些代码,观察运行情况,以此来逐个排除错误,最终找到错误代码的位置.这种情况下要

PHP对表单提交特殊字符的过滤和处理方法汇总_php技巧

PHP关于表单提交特殊字符的处理方法做个汇总,主要涉及htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_string等几个函数联合使用,与大家共同交流. 一.几个与特殊字符处理有关的PHP函数 函数名 释义 介绍 htmlspecialchars 将与.单双引号.大于和小于号化成HTML格式 &转成&"转成"' 转成'<转成<>转成> htmlentitie

PHP连接MSSQL方法汇总_php技巧

 为了能让PHP连接MSSQL,系统需要安装MSSQL,PHP,且在PHP.ini中的配置中,将 ;extension=php_mssql.dll前面的;去掉 1.连接MSSQL $conn=mssql_connect("实例名或者服务器IP","用户名","密码"); //测试连接 if($conn) { echo "连接成功"; } 2.选择要连接的数据库       mssql_select_db("dbnam