php实现短链接
PHP实现短链接的方法
短链接是将长URL转换为短字符串的技术,常用于节省字符空间或美化链接。以下是几种常见的PHP实现方法:
使用哈希算法生成短码
通过MD5或CRC32等哈希算法将长URL转换为固定长度的字符串,截取部分字符作为短码:
function generateShortCode($url) {
$hash = md5($url);
return substr($hash, 0, 6); // 取前6位
}
$shortCode = generateShortCode('https://example.com/long/url');
自增ID转短码
使用数据库自增ID,通过进制转换生成短码:
function idToShortCode($id) {
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$code = '';
while ($id > 0) {
$code = $chars[$id % 62] . $code;
$id = floor($id / 62);
}
return $code;
}
使用第三方API
调用短链接服务API(如Bitly、TinyURL):
function shortenWithBitly($url) {
$apiKey = 'YOUR_API_KEY';
$apiUrl = 'https://api-ssl.bitly.com/v4/shorten';
$data = ['long_url' => $url];
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response)->link;
}
数据库存储方案
创建数据库表存储原始URL和短码的映射关系:
CREATE TABLE short_urls (
id INT AUTO_INCREMENT PRIMARY KEY,
original_url VARCHAR(2048) NOT NULL,
short_code VARCHAR(10) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE (short_code)
);
完整实现示例
// 生成短码并存储
function createShortUrl($originalUrl) {
$shortCode = generateShortCode($originalUrl);
// 检查短码是否已存在
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$stmt = $pdo->prepare('INSERT INTO short_urls (original_url, short_code) VALUES (?, ?)');
$stmt->execute([$originalUrl, $shortCode]);
return 'https://yourdomain.com/' . $shortCode;
}
// 重定向短链接
if (isset($_GET['code'])) {
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$stmt = $pdo->prepare('SELECT original_url FROM short_urls WHERE short_code = ?');
$stmt->execute([$_GET['code']]);
$url = $stmt->fetchColumn();
if ($url) {
header("Location: $url");
exit;
} else {
header("HTTP/1.0 404 Not Found");
}
}
注意事项
- 短码长度建议6-8个字符,平衡冲突概率和URL长度
- 处理URL冲突情况,可追加随机字符或使用不同哈希算法
- 对输入URL进行验证和规范化处理
- 考虑实现过期机制或点击统计等扩展功能
- 生产环境应使用HTTPS确保安全性
以上方法可根据实际需求选择或组合使用。自实现方案适合控制度高、预算有限的场景,API方案适合快速实现且不介意依赖第三方服务的情况。







