首頁  >  文章  >  後端開發  >  php怎麼實現長鏈接轉換成短鏈接

php怎麼實現長鏈接轉換成短鏈接

PHPz
PHPz原創
2023-04-19 09:16:571292瀏覽

在網路的廣闊世界中,長連結已經成為了日常生活中不可避免的一部分。長連結不僅使人們難以記憶,而且在文字排版上也很不美觀,那麼如何將長連結轉換為短連結呢? php是一種廣泛使用的程式語言,本文將介紹如何利用php簡單地實作長連結轉換成短連結的方法。

簡單介紹短鏈接

短鏈接是一種基於互聯網的特殊鏈接,其通過使用特殊算法將長鏈接轉換成短鏈接,從而提高了鏈接的可美觀性、可讀性和可分享性。短鏈接的形式一般為短字符串,長度通常只有10~20個字符,將長鏈接通過短鏈接轉換後,不僅可以更方便地分享和傳播鏈接,還可以更好地統計鏈接被訪問的情況。

使用php產生短連結的方法

產生短連結需要分成兩個步驟,第一步是設計短連結產生演算法,第二步則是將短連結儲存到資料庫中,然後查詢時透過解析短連結取得長連結並進行跳轉。

設計短連結產生演算法

通常,短連結的產生演算法需要滿足以下一些要求:

1.產生的短連結必須具有唯一性,不會重複。

2.產生的短連結應該盡可能接近短字串。

3.產生的短連結必須可逆,也就是透過短連結可以還原出長連結。

目前,常用的短鏈接演算法有兩種,一種是透過將長連結進行加密,從而將其轉換為短鏈接,常用的加密演算法有md5和base64,但這種演算法的短連結長度較長,且會重複;另一種演算法是透過將長連結轉換為10進製或62進位的短鏈接,並根據當前時間戳記和自訂值進行生成,這一種演算法的生成速度較快,且產生的短鏈結長度比較短,同時不會重複。

接下來,我們介紹使用第二種演算法產生短連結的php實作方法。

首先,我們先定義一些變數:

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

下一步,我們需要將長連結轉換成10進位或62進位的短連結:

$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];

在在上述程式碼中,我們首先使用md5對長連結進行加密,然後對加密後的結果進行處理,將其轉換成10進位或62進位的短連結。接下來,透過隨機產生一個唯一鍵值從而在多個短鏈接中選擇其中一個短鏈接,最後將自訂的前綴和選擇的唯一短鏈接拼接成最終的短鏈接。

將短鏈接儲存到資料庫中

在上述程式碼中,我們已經產生了短鏈接,但目前我們還沒將其儲存到資料庫中,這裡我們使用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(); //关闭数据库连接

在上述程式碼中,我們定義了兩個變數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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn