php生成短网址不重复的方案有哪些

  介绍

这篇文章将为大家详细讲解有关php生成短网址不重复的方案有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

正常的网址带上参数的那种可能会很长,尤其是我们在印刷纸质品如企业宣传册中要印上某个长的url的话非常难看,而且也没几个人会去记这个网址。虽然现在可以用扫二维码的方式打开长网址,但是,人们可以使用短网址来实现优美的链接,尤其是有字数限制的应用。短网址的实现原理就是,有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问。

<强>方案1:php + MySQl实现短网址的生成和读取

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

//生成短网址   函数code62 ($ x) {   显示美元=& # 39;& # 39;;   而(x>美元;0){   s=x % 62美元;   如果(s>美元;35){   $ s=科(s + 61美元);   }elseif (s>美元;9,和s<美元;=35){   $ s=科(s + 55美元);   }   显示美元。=$ s;   $ x=地板($ x/62);   }   返回显示美元;   }   函数shorturl ($ url) {   $ url=crc32 ($ url);   结果=美元sprintf (“% u", $ url);   结果返回code62(美元);   }   回声shorturl (& # 39;//www.jb51.net/& # 39;);//1 eeiv2

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

include_once (& # 39; connect.php& # 39;);//连接数据库   $ url=$ _GET [& # 39; url # 39;];   如果收取($ url),,!空($ url)) {   $ sql=把≡駏rl从shorturl codeid=& # 39; $ url # 39;“;   美元$查询=mysql_query (sql);   如果美元($ result中进行row=mysql_fetch_array查询)){   real_url=美元行[& # 39;url # 39;];   头(& # 39;地点:& # 39;。美元real_url);   其他}{   头(& # 39;HTTP/1.0 404 Not发现# 39;);   回声& # 39;未知链接强生# 39;;   }   其他}{   头(& # 39;HTTP/1.0 404 Not发现# 39;);   回声& # 39;未知链接强生# 39;;   }

代码中,如果得到短网址对应的真实url,会使用头跳转到真实的页面上去,否则返回404代码。

<强>以下是重写规则:

# Apache规则:   RewriteRule ^/(. *) $/link.php吗?url=1美元[L]      #如果使用nginx,规则这样写:   重写^/(. *)$/link.php吗?url=1美元;

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

对于方案,使用数据库的做法好处就是操作方便,而大量短网址查询需要做优化。而方案2则放弃数据库,使用ini配置,我们将短网址

和真实网址配置在ini文件中,PHP直接通过parse_ini_file()读取ini文件,几行代码就可以实现短网址的跳转。

<强>链接。ini文件像这样配置:

百度=https://www.baidu.com/qq=http://www.qq.com/hw=http://www.hw.com/dm=http://www.dm.com/view博客- 362. - html

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

$链接=parse_ini_file (& # 39; links.ini& # 39;);      如果收取($ _GET [& # 39; l # 39;]),,array_key_exists ($ _GET [& # 39; l # 39;],美元的链接)){   头(& # 39;地点:& # 39;。美元的链接[$ _GET [& # 39; l # 39;]]);   }   其他{   头(& # 39;HTTP/1.0 404 Not发现# 39;);   回声& # 39;未知链接强生# 39;;   }

<强>当然,我们还需要配置下重写规则。

# Apache规则:   RewriteRule ^/(. *) $/index . php ?l=$ 1 [l]      #如果使用nginx,规则这样写:   重写^/(. *)$/index . php ?l=1美元;

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

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

& lt; php ?   shorturl功能(输入){   $ base32=阵列(   & # 39;一个# 39;& # 39;b # 39; & # 39; c # 39; & # 39; d # 39; & # 39; e # 39;, & # 39; f # 39; & # 39;舌鳎# 39;,& # 39;h # 39;   & # 39;我# 39;& # 39;强生# 39;& # 39;k # 39;, & # 39; l # 39; & # 39;猴# 39;,& # 39;n # 39; & # 39; o # 39;, & # 39; p # 39;   & # 39;提问# 39;& # 39;" # 39;& # 39;& # 39;,& # 39;t # 39; & # 39; u # 39;, & # 39; v # 39; & # 39; w # 39;, & # 39; x # 39;   & # 39;y # 39; & # 39; z # 39; & # 39; 0 & # 39; & # 39; 1 & # 39; & # 39; 2 & # 39; & # 39; 3 & # 39; & # 39; 4 & # 39; & # 39; 5 & # 39;   );      十六进制美元=md5(输入);   $ hexLen=strlen(十六进制);   subHexLen=hexLen美元/8;   $=输出数组();      ($ i=0;美元我& lt;subHexLen美元;$我+ +){//把加密字符按照8位一组16进制与0 x3fffffff(30位1)进行位与运算   $ subHex=substr(十六进制,我* 8美元,8);   int=0 x3fffffff美元,(1 * (& # 39;0 x # 39; subHex美元));   $=& # 39;& # 39;;      ($ j=0;$ j & lt;6;$ j + +) {//把得到的值与0 x0000001f进行位与运算,取得字符数组字符索引   val=0 x0000001f美元,int美元;   $=$ base32。[$ val];   ,int=美元int祝辞的在5;   }      输出[]=美元;   }      返回输出美元;   }   ?祝辞

php生成短网址不重复的方案有哪些