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("短域名参数错误,无法正常访问。");



@漏刻有时

相关文章
|
5月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
195 0
|
16天前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
7887 68
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
11天前
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
5月前
|
数据库
数据库创建之主文件不能容纳副本的解决方案
数据库创建之主文件不能容纳副本的解决方案
70 1
|
2月前
|
存储 缓存 监控
71.7万/秒到1.4万/秒!数据库查询优化实战
在现代计算机系统中,程序的局部性原理是优化性能的关键。通过利用时间局部性和空间局部性,可以显著提升数据访问效率,减少高开销的操作如内存访问和网络 I/O。本文将探讨如何利用空间局部性原理,在实际案例中减少数据库查询量,并通过详细的监控和优化措施确保系统的稳定性和高效性。
71.7万/秒到1.4万/秒!数据库查询优化实战
|
2月前
|
安全 网络安全 数据库
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
53 28
|
4月前
|
运维 监控 关系型数据库
数据库管理中的自动化运维:挑战与解决方案
数据库管理中的自动化运维:挑战与解决方案
|
4月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
326 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
4月前
|
算法 安全 数据库
数据库死锁的解决方案有哪些?
【10月更文挑战第28天】数据库死锁是数据库管理中的一个常见问题
206 15
|
4月前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
82 4

热门文章

最新文章