🗣 Wd提问: 短链接生成器thinkphp
🤖 Ai回答: 以下是基于ThinkPHP框架实现的短链接生成器的详细步骤和代码示例:
1、数据库表结构
创建存储短链接的数据库表:
sql
CREATE TABLE `short_urls` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`short_code` varchar(20) NOT NULL COMMENT '短链接编码',
`original_url` varchar(255) NOT NULL COMMENT '原始URL',
`created_at` int(11) NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_short_code` (`short_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2、短ID生成工具类
创建一个工具类 `Base62.php`,用于将数字转换为短ID:
php
// app/extend/Base62.php
namespace app\extend;
class Base62
{
protected static $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
public static function encode($number)
{
$base = strlen(self::$chars);
$result = '';
while ($number 0) {
$remainder = $number % $base;
$result = self::$chars[$remainder] 、$result;
$number = (int)($number / $base);
}
return $result ?: '0';
}
public static function decode($shortCode)
{
$base = strlen(self::$chars);
$number = 0;
$length = strlen($shortCode);
for ($i = 0; $i < $length; $i++) {
$char = $shortCode[$i];
$pos = strpos(self::$chars, $char);
$number = $number * $base + $pos;
}
return $number;
}
}
3、模型层
创建模型 `ShortUrl`:
php
// app/model/ShortUrl.php
namespace app\model;
use think\Model;
class ShortUrl extends Model
{
protected $name = 'short_urls';
// 自动写入时间戳
protected $autoWriteTimestamp = 'datetime';
// 生成短ID
public function generateShortCode()
{
$id = $this-id; // 假设ID已自动生成
return Base62::encode($id);
}
}
4、控制器
创建控制器 `ShortController` 处理生成和跳转逻辑:
php
// app/controller/ShortController.php
namespace app\controller;
use app\model\ShortUrl;
use think\Request;
class Short extends BaseController
{
// 生成短链接
public function create(Request $request)
{
$url = $request-post('url');
// 验证URL格式
if (empty($url) !filter_var($url, FILTER_VALIDATE_URL)) {
return json(['error' = '无效的URL']);
}
// 检查是否存在已存在的短链接
$record = ShortUrl::where('original_url', $url)-find();
if ($record) {
return json(['short_url' = $this-buildShortUrl($record-short_code)]);
}
// 保存新记录
$record = new ShortUrl();
$record-original_url = $url;
$record-save();
// 生成短ID
$record-short_code = $record-generateShortCode();
$record-save();
return json([
'short_url' = $this-buildShortUrl($record-short_code),
'short_code' = $record-short_code,
'id' = $record-id
]);
}
// 跳转到原始链接
public function redirect($code)
{
$record = ShortUrl::where('short_code', $code)-find();
if ($record) {
return redirect($record-original_url);
} else {
return redirect('https://65.hk/404');
}
}
// 构建短链接URL
protected function buildShortUrl($code)
{
return request()-domain() 、/short/{$code};
}
}
5、路由配置
在 `route/app.php` 中添加路由规则:
php
use think\facade\Route;
Route::post('short/create', 'Short/create');
Route::get('short/<code', 'Short/redirect');
6、使用示例
生成短链接:
发送POST请求到 `/short/create`,参数 `url` 为需要缩短的URL:
bash
curl -X POST http://yourdomain.com/short/create -d url=https://65.hk
返回结果:
json
{
short_url: http://yourdomain.com/short/abc123,
short_code: abc123,
id: 123
}
访问短链接:
访问 `http://yourdomain.com/short/abc123` 会重定向到原始URL `https://65.hk`。
7、扩展建议
1、缓存优化:使用Redis缓存短链接映射,提高查询速度。
2、过期机制:为短链接添加过期时间字段。
3、统计功能:记录短链接的点击次数和访问时间。
4、自定义短码:允许用户自定义短链接(需额外验证唯一性)。
8、注意事项
安全性:验证输入URL,防止恶意链接。
性能:短ID生成算法需保证唯一性,避免冲突。
异常处理:添加错误处理逻辑,如数据库连接失败等。
通过以上步骤,你可以快速实现一个基础的短链接生成器。根据需求,可以进一步扩展功能和优化性能。
📣 商家广告:





0
IP地址: 114.237.81.202
搜索次数: 0
提问时间: 2025-11-12 01:24:18
🛒 域名购买:
815.red
mw.gs
lansou.cn
41.gs
kc.biz
yb.gs
uq.gs
43.gold
lw.gs
02.gs
❓️ 热门提问:
万兆网络服务器
etp服务器是什么
2k20什么加速器
站群SEO网站日志监控
部署云服务器
机房远程控制
PHP二次开发招聘
网络机房建设 ppt
设计网站首页
网站推广用户增长
豌豆Ai站群搜索引擎系统
🌐 域名评估:
ktdj.cn
kfdy.cn
ijjjy.com
evtol.vin
61.chat
sunnykids.net.cn
yu8.sc.cn
musk.email
byd.jx.cn
qkpt.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
广州风淋室
검색 엔진
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。