当前位置:首页 > 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)
);

完整实现示例

php实现短链接

// 生成短码并存储
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实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移除…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…