这篇文章将为大家详细讲解有关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生成短网址不重复的方案有哪些