您的位置 首页 php

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('//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代码。

以下是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;

相比来说,第二种方案适合小型的应用,你还可以把url地址做成数组形式保存,还可以做一个管理界面专门维护这些短网址。

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

<?phpfunction 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生成短网址不重复的详细内容,更多请关注求知技术网其它相关文章!

文章来源:智云一二三科技

文章标题:php生成短网址不重复

文章地址:https://www.zhihuclub.com/3290.shtml

关于作者: 智云科技

热门文章

评论已关闭

2条评论

  1. Its like you read my mind! You seem to know a lot about this, like you wrote the book in it
    or something. I think that you could do with some pics to
    drive the message home a bit, but instead of that, this is great blog.
    An excellent read. I’ll definitely be back.

  2. Magnificent goods from you, man. I have understand your stuff
    previous to and you are just too magnificent.
    I really like what you’ve acquired here, really like what you are saying and the way in which you say it.
    You make it enjoyable and you still care for to keep it
    sensible. I cant wait to read far more from you.
    This is actually a great web site.

网站地图