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



@漏刻有时

相关文章
存储 人工智能 机器人
294 0
|
11月前
|
数据可视化 BI API
无缝对接云数据库:自定义报表生成工具在混合云环境下的部署指南
自定义报表生成工具通过拖拽设计、多数据源整合及自动化输出,帮助业务人员零代码创建个性化报表,解决传统工具灵活性不足、技术门槛高的问题。文章对比其与传统报表差异,列举行业应用场景(如财务、零售),并给出选型建议与主流工具(如FineReport、Power BI、板栗看板)的优劣势分析。
390 0
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
|
PHP 数据库
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
528 25
|
算法
雪花算法反思:订单ID生成的痛点与解决方案
雪花算法(Snowflake Algorithm)因其生成唯一ID的能力而被广泛应用于分布式系统中。然而,随着业务的发展和系统规模的扩大,一些隐藏的问题逐渐浮现。本文将探讨使用雪花算法生成订单ID后可能遇到的挑战,并提供相应的解决方案。
932 2
|
机器学习/深度学习 人工智能 监控
智慧交通AI算法解决方案
智慧交通AI算法方案针对交通拥堵、违法取证难等问题,通过AI技术实现交通管理的智能化。平台层整合多种AI能力,提供实时监控、违法识别等功能;展现层与应用层则通过一张图、路口态势研判等工具,提升交通管理效率。方案优势包括先进的算法、系统集成性和数据融合性,应用场景涵盖车辆检测、道路环境检测和道路行人检测等。
1534 1
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
|
存储 SQL 关系型数据库
PHP与数据库交互:从基础到进阶
【10月更文挑战第9天】在编程的世界里,数据是流动的血液,而数据库则是存储这些珍贵资源的心脏。PHP作为一门流行的服务器端脚本语言,其与数据库的交互能力至关重要。本文将带你从PHP与数据库的基本连接开始,逐步深入到复杂查询的编写和优化,以及如何使用PHP处理数据库结果。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技巧,让你在PHP和数据库交互的道路上更加从容不迫。
|
PHP 数据库 开发者
PHP中的异常处理和自定义异常
【10月更文挑战第3天】在PHP编程中,异常处理是一个重要的话题。它允许开发者优雅地处理错误,提高代码的可读性和可维护性。本文将介绍如何在PHP中进行异常处理,包括基本的try-catch结构,以及如何创建和使用自定义异常类来处理特定的错误情况。通过实际示例,我们将看到如何使用异常处理机制来增强应用程序的健壮性和灵活性。
220 1

热门文章

最新文章