php开发实战分析(9):使用实现短地址的分享的解决方案(第三方短链接服务、数据库自增ID转换、自定义短地址生成算法、自增数字短码)

简介: php开发实战分析(9):使用实现短地址的分享的解决方案(第三方短链接服务、数据库自增ID转换、自定义短地址生成算法、自增数字短码)

一、为什么要使用短地址

使用短地址的主要目的是使长网址更简洁、易记和方便分享。以下是一些常见的原因:

  1. 美观简洁:长网址通常包含多个字符和参数,而短地址可以将其简化为几个字符,使URL更短更整洁。这样能够提升用户体验,使网址更美观。
  2. 方便记忆:长而复杂的网址往往不易记忆,特别是对于移动设备上的用户来说。而短地址通常采用简洁的字符组合,更容易被记住。
  3. 方便分享:短地址更适合在有限的空间内进行分享,如社交媒体、短信、聊天应用等。长地址可能会被截断或换行,导致无法正确打开目标页面,而短地址则可以避免这种问题。
  4. 隐藏真实地址:对于一些敏感信息或需要保密的内容,使用短地址可以隐藏真实的目标URL。这可以增加一定的安全性,防止用户通过直接访问长地址获取敏感信息。
  5. 网址统计和监控:使用短地址服务商提供的统计功能,可以追踪短地址的点击量、转化率等数据,方便进行数据分析和监控。这对于营销活动、推广链接等具有重要意义。

总之,使用短地址可以提升用户体验、简化网址、方便分享和统计,因此在很多场景下都可以考虑使用。


二、实现短地址的方式

  1. 自增数字短码:基于哈希算法,将长链接生成一个短字符串,并将短字符串和长链接保存在数据库中。以获取短链接时,通过短字符串查询数据库获取对应长链接,然后将用户重定向到该长链接。
  2. 数据库自增ID转换:将长链接的ID转换成62进制,再与预设域名组合成短链接。以获取短链接时,通过短链接中的62进制ID获取长链接,然后将用户重定向到该长链接。
  3. 使用第三方短链接服务,如bit.ly、goo.gl等。将长链接提交给服务提供商,获取短链接,并将其存储在数据库中。以获取短链接时,通过短链接重定向到服务提供商的接口,让其将用户重定向到长链接。
  4. 基于自己的短链接服务,使用分布式ID生成器(如Snowflake)生成唯一ID,并将其转换成短链接。以获取短链接时,根据短链接中的唯一ID获取长链接,并将用户重定向到该长链接。


三、实战开发示例

1.短地址用法说明

格式:https://test.com/t.php?t=21_1

/*
 * 短地址系统
 * 为方便微信内传播,直接使用ID进行短域名缩写
 * 参数方式:$Id_0
 * $Id为加密方式密文
 * _分割符号
 * 0,项目链接,1,培训链接,2单位邀请注册
 * By Woodcutter 2023-05-17
 */


2.获取参数

$t = get_param('t');
$pid = explode("_", $t)[0];
$fromUrl = explode("_", $t)[1];
if (stripos($t, '_') == false) {
    die("参数错误,无法正常访问");
} 


3.跳转条件判断

 //判断跳转;
    switch ($fromUrl) {
        case "0";//项目分享
            $row = $db->fetch('project', 'project_id', array('project_id' => $pid), ' project_id DESC');
            if ($row['project_id']) {
                $url = 'app.php?m=Course&a=courseList&act=list&project_id=' . $row['project_id'];
            } else {
                die("项目信息不存在,无法访问");
            }
            break;
        case "1";//培训分享
            $row = $db->fetch('course', 'project_id,course_id', array('course_id' => $pid), ' course_id DESC');
            if ($row['course_id']) {
                $url = 'app.php?m=Course&a=courseDetails&act=show&project_id=' . $row['project_id'] . '&course_id=' . $row['course_id'];
            } else {
                die("培训信息不存在,无法访问");
            }
            break;
        case "2";//PC端单位分享
            $row = $db->fetch('depart', 'depart_id,depart_name,depart_no,province,city,area', array('depart_id' => $pid), ' depart_id DESC');
            if ($row['depart_id']) {
                $url = 'index.php?m=Index&a=register&depart_id=' . $row['depart_id'] . '&user_depart=' . UrlEncode($row['depart_name']) . '&depart_no=' . UrlEncode($row['depart_no']) . '&province=' . UrlEncode($row['province']) . '&city=' . UrlEncode($row['city']) . '&area=' . UrlEncode($row['area']);
            } else {
                die("单位信息不存在,无法访问");
            }
            break;
        case "3";//手机端单位分享
            $row = $db->fetch('depart', 'depart_id,depart_name,depart_no,province,city,area', array('depart_id' => $pid), ' depart_id DESC');
            if ($row['depart_id']) {
                $url = 'app.php?m=Index&a=register&depart_id=' . $row['depart_id'] . '&user_depart=' . UrlEncode($row['depart_name']) . '&depart_no=' . UrlEncode($row['depart_no']) . '&province=' . UrlEncode($row['province']) . '&city=' . UrlEncode($row['city']) . '&area=' . UrlEncode($row['area']);
            } else {
                die("单位信息不存在,无法访问");
            }
            break;
        case "4";//签到二维码分享
            $row = $db->fetch('course', 'project_id,course_id', array('course_id' => $pid), ' course_id DESC');
            if ($row['course_id']) {
                $url = 'app.php?m=Course&a=courseCheck&act=check&project_id=' . $row['project_id'] . '&course_id=' . $row['course_id'];
            } else {
                die("培训信息不存在,无法访问");
            }
            break;
        default:
            die("短域名参数错误,无法正常访问。");



@漏刻有时

相关文章
|
3月前
|
存储 算法 安全
控制局域网电脑上网的 PHP 哈希表 IP 黑名单过滤算法
本文设计基于哈希表的IP黑名单过滤算法,利用O(1)快速查找特性,实现局域网电脑上网的高效管控。通过PHP关联数组构建黑名单,支持实时拦截、动态增删与自动过期清理,适用于50-500台终端场景,显著降低网络延迟,提升管控灵活性与响应速度。
134 8
|
3月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
340 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
8月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
3月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
4月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
4月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
11月前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
8970 71
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
7月前
|
运维 监控 算法
局域网屏幕监控软件 PHP 图像块增量传输算法解析
本文探讨了一种基于PHP语言开发的图像块增量传输算法,适用于局域网屏幕监控场景。通过将屏幕图像分块处理、计算哈希值并对比变化区域,该算法显著降低了网络带宽占用,提升了监控效率。在企业管理和远程教育中,该技术可实现终端设备的实时监控与远程管控,同时支持与生物识别等技术融合,拓展应用范围。实验表明,该算法在常规办公场景下可减少90%以上的数据传输量,展现了良好的实时性和优化效果。
151 3