导读:本期聚焦于小伙伴创作的《短链接还原php后链接失效怎么确认原链接是否已过期》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《短链接还原php后链接失效怎么确认原链接是否已过期》有用,将其分享出去将是对创作者最好的鼓励。

短链接还原是开发中常见的功能需求,通过php实现短链接到原链接的映射后,有时会遇到还原得到的原链接无法访问的情况,这时候需要判断原链接是否已经过期。短链接的本质是将长链接映射为短字符串存储在数据库或缓存中,还原时通过短码查询对应的原链接即可。

短链接还原php后链接失效怎么确认原链接是否已过期

php实现短链接还原的基础逻辑

短链接还原的核心是从存储映射关系的地方获取短码对应的原链接,常见存储方式包括MySQL数据库、Redis缓存等。以下是基于MySQL数据库实现短链接还原的php示例代码:

<?php
// 数据库连接配置
$host = '127.0.0.1';
$user = 'root';
$pass = '123456';
$dbname = 'short_link_db';

// 连接数据库
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 获取短码,假设短链接格式为 http://domain.com/s/abc123,短码为abc123
$shortCode = isset($_GET['code']) ? trim($_GET['code']) : '';
if (empty($shortCode)) {
    die("短码不能为空");
}

// 查询对应的原链接
$sql = "SELECT original_url FROM short_link WHERE short_code = ? LIMIT 1";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $shortCode);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $originalUrl = $row['original_url'];
    echo "还原得到的原链接: " . $originalUrl;
} else {
    echo "未找到对应的原链接,短码无效";
}

$stmt->close();
$conn->close();
?>

确认原链接是否过期的方法

还原得到原链接后,需要通过校验判断原链接是否已经过期,常见的校验方式有以下几种。

1. 发送HTTP请求判断响应状态码

通过php发送HTTP请求到原链接,根据返回的响应状态码判断链接是否有效。2xx状态码表示链接正常,404表示资源不存在,403表示无权限访问,500及以上表示服务器错误,这些都可能意味着原链接已经过期或无法访问。

以下是使用curl扩展发送请求检测链接状态的示例代码:

<?php
function checkUrlStatus($url) {
    $ch = curl_init();
    // 设置curl选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, true); // 获取响应头
    curl_setopt($ch, CURLOPT_NOBODY, true); // 不获取响应体,减少请求开销
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置超时时间10秒
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
    
    curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 获取HTTP状态码
    $error = curl_error($ch);
    curl_close($ch);
    
    if (!empty($error)) {
        return "请求失败: " . $error;
    }
    return $httpCode;
}

// 测试原链接状态
$testUrl = "https://ipipp.com/test/page";
$status = checkUrlStatus($testUrl);
echo "原链接的HTTP状态码: " . $status;
if ($status == 200) {
    echo ",原链接正常可访问";
} elseif ($status == 404) {
    echo ",原链接资源不存在,已过期";
} else {
    echo ",原链接访问异常,可能已过期";
}
?>

2. 检查链接对应的业务过期标识

如果原链接是业务系统内部的链接,通常会在数据库或缓存中存储链接的过期时间,这时候可以直接查询对应的过期标识判断链接是否过期,不需要发送HTTP请求。

假设原链接关联的业务表中有expire_time字段存储过期时间,校验示例如下:

<?php
// 假设已经获取到原链接对应的业务ID,这里简化为直接查询
$businessId = 123;
$conn = new mysqli('127.0.0.1', 'root', '123456', 'business_db');
$sql = "SELECT expire_time FROM business_link WHERE id = ? LIMIT 1";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $businessId);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $expireTime = strtotime($row['expire_time']);
    $currentTime = time();
    if ($expireTime < $currentTime) {
        echo "原链接已过期,过期时间: " . date("Y-m-d H:i:s", $expireTime);
    } else {
        echo "原链接未过期,过期时间: " . date("Y-m-d H:i:s", $expireTime);
    }
} else {
    echo "未找到对应的业务链接信息";
}
$stmt->close();
$conn->close();
?>

3. 检测链接对应的资源是否存在

如果原链接指向的是服务器上的静态资源,比如文件、图片等,可以直接检查服务器上对应的资源文件是否存在,判断链接是否过期。

<?php
// 假设原链接是服务器上的文件链接,格式为 http://domain.com/uploads/file/123.pdf
$originalUrl = "http://127.0.0.1/uploads/file/123.pdf";
// 解析URL获取文件路径,这里假设域名对应服务器根目录为 /var/www/html
$urlPath = parse_url($originalUrl, PHP_URL_PATH);
$filePath = "/var/www/html" . $urlPath;

if (file_exists($filePath)) {
    echo "原链接对应的文件存在,未过期";
} else {
    echo "原链接对应的文件不存在,已过期";
}
?>

常见问题与解决思路

  • 短链接还原后得到的原链接本身正确,但访问时提示404:这种情况大概率是原链接对应的资源已经被删除,属于原链接过期的情况,可通过上述HTTP请求检测或资源存在性检测确认。
  • 短链接还原逻辑正确,但查询不到原链接:说明短码本身无效,可能是短链接生成后未正确存储,或者短码被篡改,不属于原链接过期的问题。
  • 原链接返回301/302重定向后无法访问:需要跟随重定向获取最终的响应状态码,再判断最终链接是否有效,上述curl示例已经开启了跟随重定向的配置。

总结

短链接还原后链接失效时,首先确认还原逻辑是否正确获取到原链接,再通过发送HTTP请求判断响应状态码、检查业务过期标识、检测资源存在性等方法来确认原链接是否已经过期。不同的场景可以选择不同的检测方式,业务内部链接优先使用业务标识校验,外部链接优先使用HTTP状态码检测,这样能更高效地定位问题。

短链接还原php原链接过期链接有效性检测修改时间:2026-07-21 10:30:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。