如何将PHP中的长链接转换为短链接?

PHP实现长链接短链接的方法主要通过两种算法:自增序列算法和摘要算法,以下是这两种方法的详细步骤和示例代码:

1. 自增序列算法

如何将PHP中的长链接转换为短链接?插图1
(图片来源网络,侵删)

这种方法通过设置一个自增的ID,将其转换为62进制的数值,从而生成唯一的短链接,以下是具体实现步骤:

1.1 创建数据库表

创建一个用于存储长链接和短链接映射关系的数据库表:


CREATE TABLElong_short_url (id int(32) unsigned NOT NULL AUTO_INCREMENT,long_url varchar(255) DEFAULT NULL,short_url_code varchar(255) DEFAULT NULL,create_time varchar(32) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

1.2 生成短链接

使用PHP生成短链接并存入数据库:

如何将PHP中的长链接转换为短链接?插图3
(图片来源网络,侵删)
function generateShortUrl($longUrl) {
    $base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $baseLen = strlen($base);
    $id = mt_rand(1, 62); // 随机生成一个ID
    $shortUrlCode = base_convert($id, 10, $baseLen); // 将ID转换为62进制
    
    // 插入数据库
    $conn = new mysqli('localhost', 'username', 'password', 'database');
    $stmt = $conn->prepare("INSERT INTO long_short_url (long_url, short_url_code, create_time) VALUES (?, ?, NOW())");
    $stmt->bind_param("ss", $longUrl, $shortUrlCode);
    $stmt->execute();
    $stmt->close();
    $conn->close();
}
$longUrl = 'http://www.example.com/longurl';
generateShortUrl($longUrl);

2. 摘要算法

这种方法通过对长链接进行MD5哈希处理,生成短链接,以下是具体实现步骤:

2.1 创建数据库表

与自增序列算法相同,创建一个用于存储长链接和短链接映射关系的数据库表。

2.2 生成短链接

如何将PHP中的长链接转换为短链接?插图5
(图片来源网络,侵删)

使用PHP生成短链接并存入数据库:

function generateShortUrl($longUrl) {
    $key = 'swz0823'; // 自定义key值
    $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    // 利用md5算法方式生成hash值
    $hex = hash('md5', $longUrl . $key);
    $hexLen = strlen($hex);
    $subHexLen = $hexLen / 8;
    
    $output = array();
    for ($i = 0; $i < $subHexLen; $i++) {
        $subHex = substr($hex, $i * 8, 8);
        $idx = bindec(substr($subHex, -6)); // 取后6位作为索引
        
        // 这30位分成6段, 每5个一组,算出其整数值,然后映射到我们准备的62个字符中
        $out = '';
        for ($j = 0; $j < 6; $j++) {
            $val = $idx % 62;
            $out .= $base32[$val];
            $idx = floor($idx / 62);
        }
        $output[] = $out;
    }
    return $output;
}
$longUrl = 'http://www.example.com/longurl';
$ret = generateShortUrl($longUrl);
var_dump($ret); // 输出短链接数组

2.3 将长链接和短链接存入数据库

function storeUrlMapping($longUrl, $shortUrlCode) {
    $conn = new mysqli('localhost', 'username', 'password', 'database');
    $stmt = $conn->prepare("INSERT INTO long_short_url (long_url, short_url_code, create_time) VALUES (?, ?, NOW())");
    $stmt->bind_param("ss", $longUrl, $shortUrlCode[0]); // 选择其中一个短链接作为显示
    $stmt->execute();
    $stmt->close();
    $conn->close();
}
$shortUrlCode = generateShortUrl($longUrl);
storeUrlMapping($longUrl, $shortUrlCode[0]);

3. Nginx重定向配置

修改Nginx配置文件,实现短链接到长链接的重定向:

server {
    listen 80;
    server_name t.test.com;
    rewrite ^/(.*) http://www.test.com/api/longUrl?code=$1 redirect;
    access_log off;
}

4. API接口实现

编写API接口,用于根据短链接查询长链接并进行重定向:

public function longUrl() {
    $code = $_GET['code'];
    $data = M('long_short_url')->where('short_url_code=' . $code)->find();
    if ($data) {
        $url = $data['long_url'];
        header("Location: " . $url);
        exit;
    } else {
        echo "短链接不存在";
    }
}

通过上述步骤,可以实现PHP环境下的长链接转短链接功能,并通过Nginx重定向实现短链接到长链接的跳转。

到此,以上就是小编对于php长链接转短链接 _链接的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/66279.html

小末小末
上一篇 2024年10月2日 23:29
下一篇 2024年10月2日 23:42

相关推荐