当前位置:首页 > PHP

php实现短网址

2026-04-03 03:42:10PHP

PHP实现短网址的方法

使用哈希算法生成短码

通过MD5或CRC32等哈希算法将长网址转换为固定长度的短码。MD5生成32位字符串,可截取前6-8位作为短码。

function generateShortCode($url) {
    $hash = md5($url);
    return substr($hash, 0, 6); // 取前6位
}

自增ID转Base62编码

利用数据库自增ID,通过Base62编码(0-9,a-z,A-Z)转换为短字符串。比Base64更友好,不含特殊字符。

function idToShortCode($id) {
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $code = '';
    while ($id > 0) {
        $code = $chars[$id % 62] . $code;
        $id = floor($id / 62);
    }
    return $code;
}

数据库存储映射关系

需要两张表:urls表存储原始URL,stats表用于统计访问数据。

CREATE TABLE urls (
    id INT AUTO_INCREMENT PRIMARY KEY,
    long_url TEXT NOT NULL,
    short_code VARCHAR(10) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE stats (
    id INT AUTO_INCREMENT PRIMARY KEY,
    url_id INT,
    visit_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    referrer VARCHAR(255),
    FOREIGN KEY (url_id) REFERENCES urls(id)
);

301重定向处理

当用户访问短链接时,通过PHP头部进行301永久重定向,有利于SEO。

$shortCode = $_GET['code'];
// 查询数据库获取对应长网址
header("HTTP/1.1 301 Moved Permanently");
header("Location: $longUrl");
exit;

防止重复和冲突

在生成短码后检查数据库是否已存在,若存在则重新生成或追加随机字符。可添加唯一索引确保数据完整性。

do {
    $code = generateShortCode($url . mt_rand());
    $exists = $db->query("SELECT COUNT(*) FROM urls WHERE short_code = '$code'")->fetchColumn();
} while ($exists > 0);

添加有效期控制

为短链接设置过期时间,自动清理过期记录。

ALTER TABLE urls ADD expires_at DATETIME DEFAULT NULL;

定期清理脚本:

$db->exec("DELETE FROM urls WHERE expires_at < NOW()");

统计功能实现

每次重定向时插入统计记录,后续可分析访问量、时间段分布等数据。

$db->prepare("INSERT INTO stats (url_id, referrer) VALUES (?, ?)")
   ->execute([$urlId, $_SERVER['HTTP_REFERER'] ?? '']);

安全性考虑

对输入URL进行验证过滤,防止XSS和SQL注入。使用预处理语句操作数据库。

php实现短网址

$longUrl = filter_var($inputUrl, FILTER_VALIDATE_URL);
if (!$longUrl) {
    throw new InvalidArgumentException('Invalid URL');
}

标签: 网址php
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…