全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php如何生成短链接地址_php短链生成算法与数据库映射设计

短链接生成核心是通过自增ID的62进制转换生成短码,并在数据库中映射长链接。使用PHP将唯一ID转为短字符串(如12345→"3d7"),存储至带唯一索引的表中,查询时通过短码快速定位原链接并301跳转,结合缓存与防刷机制优化性能与安全。

短链接的生成核心在于将长网址转换为简短、易记的字符串,并通过数据库映射实现跳转。PHP 实现这一功能主要包含两个部分:短链算法设计与数据库映射机制。

短链生成算法

常用的短链算法是将唯一ID进行进制转换,生成短字符串。通常使用 62 进制(0-9, a-z, A-Z)来缩短长度。

步骤如下:

  • 为每条长链接分配一个自增 ID(如 MySQL 的主键)
  • 将该 ID 转换为 62 进制字符串
  • 补足位数或添加随机因子增强安全性(可选)
示例代码:
function idToShort($id) {
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $base = strlen($chars);
    $short = '';

    while ($id > 0) {
        $short = $chars[$id % $base] . $short;
        $id = intval($id / $base);
    }

    return $short ?: '0';
}

// 示例:ID 为 12345,生成短码 "3d7"
echo idToShort(12345); // 输出类似结果

数据库映射设计

短链系统依赖数据库存储原始 URL 与短码之间的对应关系。表结构应简洁高效,支持快速查询和去重。

推荐表结构:

CREATE TABLE short_links (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    long_url TEXT NOT NULL,
    short_code CHAR(8) NOT NULL UNIQUE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_short_code (short_code),
    INDEX idx_long_url (long_url(255))
);

说明:

  • id:自增主键,用于生成短码
  • long_url:原始长链接,建议加前缀索引以提升查重效率
  • short_code:生成的短码,必须唯一,用于跳转路由

完整流程实现

用户提交长链接时,系统执行以下逻辑:

  • 检查是否已存在相同的 long_url,若存在则直接返回已有短码
  • 否则插入新记录,获取自增 ID,将其转换为 short_code
  • 保存 short_code 到数据库并返回短链接(如:yourdomain.com/abc123

跳转时,通过 $_GET['code'] 获取 short_code,查询 long_url 并执行 301 跳转。

跳转示例:
$code = $_GET['code'] ?? '';
if (!preg_match('/^[a-zA-Z0-9]{1,10}$/', $code)) {
    http_response_code(400);
    exit('Invalid code');
}

// 查询数据库
$stmt = $pdo->prepare("SELECT long_url FROM short_links WHERE short_code = ?");
$stmt->execute([$code]);
$row = $stmt->fetch();

if ($row) {
    header('Location: ' . $row['long_url'], true, 301);
} else {
    http_response_code(404);
    echo 'Link not found';
}

优化与安全建议

  • 使用缓存(如 Redis)缓存热门链接,减少数据库压力
  • 限制单个 IP 提交频率,防止刷量
  • 可加入过期时间字段,实现临时链接
  • 避免暴露自增 ID 规律,可在生成 short_code 后加盐或打乱顺序
基本上就这些,核心是 ID 映射 + 进制转换 + 数据库索引优化。


# mysql  # php  # redis  # ai  # 路由  # red  # 字符串  # 算法  # 数据库  # 跳转  # 转换为  # 主键  # 这一  # 已有  # 并在  # 将其  # 可在  # 可选  # 数据库中 


相关文章: Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  建站主机解析:虚拟主机配置与服务器选择指南  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  网站制作新手教程,新手建设一个网站需要注意些什么?  如何在阿里云香港服务器快速搭建网站?  网站企业制作流程,用什么语言做企业网站比较好?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  制作网页的网站有哪些,电脑上怎么做网页?  C#怎么创建控制台应用 C# Console App项目创建方法  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  名字制作网站免费,所有小说网站的名字?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  青岛网站建设如何选择本地服务器?  如何在阿里云通过域名搭建网站?  如何快速生成橙子建站落地页链接?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  定制建站价位费用解析与套餐推荐全攻略  模具网站制作流程,如何找模具客户?  建站之家VIP精选网站模板与SEO优化教程整合指南  建站主机选购指南:核心配置优化与品牌推荐方案  如何基于PHP生成高效IDC网络公司建站源码?  建站之星如何取消后台验证码生成?  如何在万网自助建站平台快速创建网站?  建站之星下载版如何获取与安装?  如何通过网站建站时间优化SEO与用户体验?  建站主机选虚拟主机还是云服务器更好?  再谈Python中的字符串与字符编码(推荐)  宝塔面板如何快速创建新站点?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何选择最佳自助建站系统?快速指南解析优劣  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  北京网站制作的公司有哪些,北京白云观官方网站?  建站之星安装步骤有哪些常见问题?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何在IIS服务器上快速部署高效网站?  建站之星备案是否影响网站上线时间?  如何使用Golang安装API文档生成工具_快速生成接口文档  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建设网站制作价格,怎样建立自己的公司网站?  如何选择适合PHP云建站的开源框架?  用v-html解决Vue.js渲染中html标签不被解析的问题  制作电商网页,电商供应链怎么做?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  网站插件制作软件免费下载,网页视频怎么下到本地插件?  建站之星展会模版如何一键下载生成?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何将凡科建站内容保存为本地文件?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何快速搭建高效香港服务器网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。