ホームページ >バックエンド開発 >PHPチュートリアル >PHP は URL ロング接続生成ショートリンク操作を実装します

PHP は URL ロング接続生成ショートリンク操作を実装します

巴扎黑
巴扎黑オリジナル
2016-11-23 11:44:312421ブラウズ

ショートリンクとは、平たく言えば、プログラムの計算やその他の方法によって長い URL を短い URL 文字列に変換することです。

この利点は次のとおりです: 1. コンテンツのニーズ; 2. ユーザーフレンドリー; 3. 管理が簡単。

初期の短いリンクは、URL リンク ワードの数を短縮してコード文字列の数を減らすために、画像アップロード Web サイトで広く使用されていました。ユーザーは URL を引用してコードに書き込み、文字スペースを「節約」する方が簡単です。オンライン ストアの画像分類でよく使用されます。文字制限により、外部リンク画像の目的を達成するために短いリンクが使用されます。 Weibo の人気以来、Weibo の文字数には制限があるため、文字数を節約し、ブロガーにより多くのテキストを公開するスペースを与えるために、Weibo Web サイトでも短いリンクが人気になってきました。

<?php
/**
 * 由长连接生成短链接操作
 * 
 * 算法描述:使用6个字符来表示短链接,我们使用ASCII字符中的&#39;a&#39;-&#39;z&#39;,&#39;0&#39;-&#39;9&#39;,&#39;A&#39;-&#39;Z&#39;,共计62个字符做为集合。
 *      每个字符有62种状态,六个字符就可以表示62^6(56800235584),那么如何得到这六个字符,
 *           具体描述如下:
 *  1. 对传入的长URL+设置key值 进行Md5,得到一个32位的字符串(32 字符十六进制数),即16的32次方;
 *        2. 将这32位分成四份,每一份8个字符,将其视作16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
 *  3. 这30位分成6段, 每5个一组,算出其整数值,然后映射到我们准备的62个字符中, 依次进行获得一个6位的短链接地址。
 *
 * @author flyer0126
 * @since 2012/07/13
 */
function shortUrl( $long_url )
{
    $key = &#39;flyer0126&#39;;
    $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    // 利用md5算法方式生成hash值
    $hex = hash(&#39;md5&#39;, $long_url.$key);
    $hexLen = strlen($hex);
    $subHexLen = $hexLen / 8;
    
    $output = array();
    for( $i = 0; $i < $subHexLen; $i++ )
    {
    // 将这32位分成四份,每一份8个字符,将其视作16进制串与0x3fffffff(30位1)与操作
    $subHex = substr($hex, $i*8, 8);
    $idx = 0x3FFFFFFF & (1 * (&#39;0x&#39; . $subHex));
   
    // 这30位分成6段, 每5个一组,算出其整数值,然后映射到我们准备的62个字符
    $out = &#39;&#39;;
    for( $j = 0; $j < 6; $j++ )
    {
    $val = 0x0000003D & $idx;
    $out .= $base32[$val];
    $idx = $idx >> 5;
    }
    $output[$i] = $out;
    }
    
    return $output;
}
  
$url = &#39;http://flyer0126.iteye.com/&#39;;
$ret = shortUrl($url);
var_dump($ret);
################ 打印结果 ################
/* array(4) {
[0]=>
string(6) "2aEzqe"
[1]=>
string(6) "Rj6Bve"
[2]=>
string(6) "f2mQvi"
[3]=>
string(6) "z2eqYv"
} */

#URL と短いリンクの結果をデータベースに保存し、そのうちの 1 つを選択して表示します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。