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生成短链接并存入数据库:
(图片来源网络,侵删)
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生成短链接并存入数据库:
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