ホームページ > バックエンド開発 > PHPチュートリアル > PHPショートリンクアルゴリズムの収集と分析_PHPチュートリアル

PHPショートリンクアルゴリズムの収集と分析_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:21:41
オリジナル
1062 人が閲覧しました

短縮リンクについては説明しません。誰もがすでに知っています。短縮リンクは次のとおりです。
Sina Weibo http://t.cn/SVpONM
Tencent Weibo http://url.cn/302yor
Yun.io http://d.yun.io/PNri2v
短いリンクの利点: 1. コンテンツが必要である; 2. ユーザーフレンドリーである; 3. 管理が簡単である。
実装方法には、大きく分けて 3 つのステップがあります:
1. 長い URL を短い文字列にマッピングできる URL マッピング アルゴリズムを定義します。
2. 完成したマッピングを保存するためにストレージ (データベース? NoSQL?) を使用します。独自の URL マッピング アルゴリズムを実装します。
一般的に言えば、3 番目のステップは、長い URL 文字列を短い文字列にマッピングする方法です。 3 つの方法をまとめました:
一般的な実装
10 進数と 2 進数の間の変換、または 10 進数と 16 進数の間の変換については、誰もが学んだことがあるかと思います。数値を短くするために、62 桁のシステムを使用できます。トランスコードされ、短い文字列に変換されます。
このアプローチの欠点は、すべてのリンクのビット長を確実に固定する方法がないことです。同時実行性が高い場合、迅速な配信を確保する方法が問題になります。
具体的な実装方法:

コードをコピーします コードは次のとおりです:
/**
* 短いリンクのデジタル ID をエンコードするには 16 進数を使用します。欠点は、各短いリンクが固定長であることが保証できないことです
*
* @author wanshiqiang @param integer $integer
* @パラメータ文字列 $base
*/
private function getShortenedURLFromID ($integer, $base = ALLOWED_CHARS)
{
$length = strlen($base );
while($integer > $length - 1)
{
$out = $base[fmod($integer, $length)]
$integer = Floor( $integer; / $length );
戻り $base[$integer]
}
/**
* 16 進数でエンコードされた短いリンクをデコードします
*
* @author wangshiqiang
* @param string $string
* @param string $base
*/
プライベート関数 getIDFromShortenedURL ($string, $base = ALLOWED_CHARS)
{
$length = strlen ($base);
$size = strlen($string) - 1;
$string = str_split($string);
foreach($string として $); i => $char )
{
$out += strpos($base, $char) * pow($length, $size - $i)
}
return $out
}
文字通りの実装
アルゴリズムの説明: 短いリンクを表すには 6 文字を使用します。ASCII 文字の「a」~「z」、「0」~「5」、合計 32 文字をセットとして使用します。各文字には 32 の状態があります。6 つの文字は 32^6 (1073741824) を表すことができます。したがって、これらの 6 つの文字を取得する方法は次のように説明されます。
32 ビット文字列を取得するための受信長い URL。 16 の 32 乗。これは基本的に一意性を保証します。この 32 ビットを 4 つの部分に分割すると、各部分は 8 文字になります。このときの確率は 16 の 8 乗、つまり 4294967296 になります。この数値の衝突確率も比較的小さいです。この 8 ビット文字を 16 進整数、つまり 1*('0x'.$val) とみなして、0 ~ 30 ビットを 5 個のグループごとに取り、その整数値を計算して、次のようにマッピングします。用意された32文字から、最終的に6桁のショートリンクアドレスを取得できます。
PHP の実装は次のとおりです:


コードをコピー

コードは次のとおりです:
function short( $long_url ) { $base32 = "abcdefghijklmnopqrstuvwxyz012345"; $hex = md5( $long_url );
$hexLen = strlen ( $hex );
$subHexLen = $hexLen / 8;
$output = array();
for( $i $subHex = substr( $hex , $i * 8, 8 );
$subHex = 0x3FFFFFFF & ( 1 * ('0x' . $subHex ) ); $out = ''for( $j = 0; $j < 6; $ j++ )
$val = 0x0000001F & $int;
$int = $int >> $out;
}
return $output;


2 番目の実装
次の関数は、短いリンクが再利用されないようにクエリ操作を使用できます。これは本当に信頼できますか~~



コードをコピーします

コードは次のとおりです:


function random($length, $pool = '') {
$random = ''; empty($pool)) { $pool = 'abcdefghkmnpqrstuvwxyz'; $pool .=
'23456789' }
for($i = 0; $i substr($pool,(rand()%(strlen ($pool))), 1) }
$random を返す
;
Technorati タグ: 短いリンク、短い URL、マッピング、ハッシュ

参考:

1. Weiboショートアドレスの原理分析

2. Weiboショートドメイン名の原理と機能

3、Yours.org

4. 素晴らしい PHP URL 短縮スクリプト

5. PHP 短縮 URL アルゴリズムの実装

6. 独自の短縮 URL を実装します

7. 短縮URLアルゴリズムの暫定的な概要

8. 短い URL の実装

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324818.html技術記事短いリンクについては説明しません。誰もがすでに知っているので、短いリンクは次のとおりです。 Sina Weibo http://t.cn/SVpONM Tencent Weibo http://url.cn/302yor Yun.io http:/ /d.yun.io/PNri2v ショートリンク...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート