ホームページ >バックエンド開発 >PHPの問題 >PHPで長いリンクを短いリンクに変換する方法

PHPで長いリンクを短いリンクに変換する方法

PHPz
PHPzオリジナル
2023-04-19 09:16:571353ブラウズ

インターネットの広大な世界では、長いリンクが日常生活の避けられない一部となっています。長いリンクは覚えにくいだけでなく、テキスト レイアウトの点でも非常に見苦しくなります。では、長いリンクを短いリンクに変換するにはどうすればよいでしょうか? PHP は広く使われているプログラミング言語ですが、この記事では PHP を使って長いリンクを短いリンクに簡単に変換する方法を紹介します。

短いリンクの概要

短いリンクは、インターネットに基づく特別なリンクです。特別なアルゴリズムを使用して長いリンクを短いリンクに変換し、それによって見た目の美しさと読みやすさを向上させます。読みやすさと共有しやすさ。短いリンクは通常、長さが 10 ~ 20 文字の短い文字列の形式です。長いリンクを短いリンクに変換すると、リンクの共有と普及がより便利になるだけでなく、訪問数のカウントも向上します。リンクの。

php を使用して短いリンクを生成する方法

短いリンクの生成は 2 つのステップに分ける必要があります。最初のステップは短いリンク生成アルゴリズムを設計することであり、2 番目のステップは短いリンクを保存することです。データベース内の短いリンク。クエリを実行するときに、短いリンクを解析して長いリンクを取得し、そこにジャンプします。

ショート リンク生成アルゴリズムの設計

通常、ショート リンク生成アルゴリズムは次の要件を満たす必要があります:

1. 生成されるショート リンクは一意であり、重複してはなりません。 。

2. 生成される短いリンクは、できるだけ短い文字列に近いものにする必要があります。

3. 生成された短いリンクは可逆的である必要があります。つまり、長いリンクは短いリンクを通じて復元できます。

現在、一般的に使用されているショート リンク アルゴリズムは 2 つあります。1 つは、長いリンクを暗号化して短いリンクに変換するものです。一般的に使用される暗号化アルゴリズムには、md5 と Base64 が含まれますが、このアルゴリズムの短さは次のとおりです。リンクの長さは次のとおりです。長いリンクが繰り返されます。別のアルゴリズムは、長いリンクを 10 進数または 16 進数の短いリンクに変換し、現在のタイムスタンプとカスタム値に基づいて生成します。このアルゴリズムの生成速度は速く、生成された短いリンクは長さが短いので繰り返しません。

次に、2 番目のアルゴリズムを使用して短いリンクを生成する PHP の実装方法を紹介します。

まず、いくつかの変数を定義します:

$url = 'http://www.example.com/longurl'; //待转换的长链接
$base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; //定义62进制字符
$prefix = 'http://s.com/'; //自定义短链接前缀

次に、長いリンクを 10 進数または 62 16 進数の短いリンクに変換する必要があります:

$hex = md5($url);
$hexLen = strlen($hex);
$subHexLen = $hexLen / 8;
$output = array();

for ($i = 0; $i < $subHexLen; $i++) {
    $subHex = substr($hex, $i * 8, 8);
    $int = 0x3FFFFFFF & (1 * (&#39;0x&#39; . $subHex));
    $out = &#39;&#39;;
    for ($j = 0; $j < 6; $j++) {
        $val = 0x0000003D & $int;
        $out .= $base[$val];
        $int = $int >> 5;
    }
    $output[] = $out;
}

$key = array_rand($output);
$shortUrl = $prefix . $output[$key];

In 上記ではコードでは、まず md5 を使用して長いリンクを暗号化し、次に暗号化された結果を処理して 10 進数または 16 進数の短いリンクに変換します。次に、一意のキー値をランダムに生成することによって複数のショート リンクから 1 つのショート リンクが選択され、最後にカスタム プレフィックスと選択された一意のショート リンクが最終的なショート リンクに接続されます。

短いリンクをデータベースに保存する

上記のコードでは、短いリンクを生成しましたが、まだデータベースに保存していません。ここでは、mysql データベースを使用して、データベースに短いリンクを保存するコードは次のとおりです。

include 'config.php'; //包含数据库连接配置文件
$long_url = 'http://www.example.com/longurl'; //长链接

//生成短链接的代码
$hex = md5($long_url);
$hexLen = strlen($hex);
$subHexLen = $hexLen / 8;
$output = array();

for ($i = 0; $i < $subHexLen; $i++) {
    $subHex = substr($hex, $i * 8, 8);
    $int = 0x3FFFFFFF & (1 * (&#39;0x&#39; . $subHex));
    $out = &#39;&#39;;
    for ($j = 0; $j < 6; $j++) {
        $val = 0x0000003D & $int;
        $out .= $base[$val];
        $int = $int >> 5;
    }
    $output[] = $out;
}

$key = array_rand($output);
$short_url = $prefix . $output[$key];

//将短链接存储到数据库中
$insert_sql = "INSERT INTO `short_url` (`long_url`, `short_url`, `create_time`) VALUES ('{$long_url}', '{$short_url}', NOW())"; //将长链接和短链接插入数据库中
$conn->query($insert_sql); //执行插入操作
$conn->close(); //关闭数据库连接

上記のコードでは、長いリンクと短いリンクをそれぞれ保存する 2 つの変数 long_url と short_url を定義し、その後、長いリンクと短いリンクを保存する SQL ステートメントを挿入します。短いリンク short_url テーブルに挿入します。このうち、create_timeフィールドにはショートリンクが作成された時刻が格納され、データ型はDATETIMEとなります。

短いリンクを介して長いリンクにジャンプする

最後に、短いリンクを解析し、データベースから対応する長いリンクをクエリして、ジャンプする必要があります。コードは次のように実装されます:

include 'config.php'; //包含数据库连接配置文件
$short_url = 'http://s.com/abcd'; //短链接

//从数据库中查询出对应的长链接
$select_sql = "SELECT long_url FROM `short_url` WHERE `short_url`='{$short_url}'";
$result = $conn->query($select_sql); //执行查询操作
$row = $result->fetch_array(MYSQLI_ASSOC);

//跳转到长链接
if ($row) {
    $long_url = $row['long_url'];
    header('location:' . $long_url); //跳转到原来的长链接
    exit;
} else {
    echo '短链接不存在'; //如果短链接不存在,则输出短链接不存在
}
$conn->close(); //关闭数据库连接

上記のコードでは、最初に短いリンクをパラメータとして使用してデータベースにクエリを実行し、対応する長いリンクを見つけます。存在する場合、ユーザーは長いリンクにジャンプします。リンクしない場合、出力ショートリンクは存在しません。

概要

php は広く使用されているプログラミング言語であり、php の基本的な構文と関数ライブラリを理解することで、長いリンクを短いリンクに変換する機能を簡単に実現できます。この記事で紹介する短いリンクを生成するアルゴリズムは、それほど複雑ではありませんが、優れた計算速度とリンクの一意性を備えており、ほとんどのアプリケーション シナリオに適しています。短いリンク生成の安定性とクエリ速度を向上させるために、実際のニーズに応じてコードを改善することをお勧めします。

以上がPHPで長いリンクを短いリンクに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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