当前位置:首页 > PHP

php实现短链接

2026-02-16 07:51:42PHP

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方案适合快速实现且不介意依赖第三方服务的情况。

php实现短链接

标签: 链接php
分享给朋友:

相关文章

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT A…