php 개발 실용 분석(9): 솔루션을 사용하여 단축 주소 공유 실현(제3자 단축 링크 서비스, 데이터베이스 자동 증분 ID 변환, 맞춤형 단축 주소 생성 알고리즘, 자동 증분 디지털 단축 코드)

PHP 개발 전투 분석 시리즈 카탈로그

  1. PHP 개발의 실용 분석(1): mysql 연산 필드(멀티 데이터 테이블에서 다중 필드 추가, 삭제, 수정, 추가)
  2. php 개발의 실용 분석 (2) : 쿠키의 동적 사용 (설정, 획득, 삭제, 원리가 마음에 드셨는지 추측, 장바구니 호출)
  3. php 개발의 실용 분석 (3) : php에서 변수가 비어있는지(0, false, null) 판단하는 방법
  4. PHP 개발의 실제 분석(4): PHP 호출 캡슐화 기능에는 다양한 디렉토리에 대한 파일 경로 적응 솔루션이 포함되어 있습니다($_SERVER['DOCUMENT_ROOT'] 및 __DIR__ 매직 상수).
  5. PHP 개발의 실제 분석(5): 파일 및 디렉토리 작업
  6. PHP 개발의 실용 분석(6): 구성 파일 또는 캐시 파일의 생성 및 호출
  7. PHP 개발의 실용 분석(7): mysql 라이브러리 작업의 고급 사용
  8. PHP 개발 실용 분석(8): mysql 클래스 라이브러리 운영을 위한 API 개발 고급 활용(필드 운영, 권한 할당, 날짜 형식, 교차 테이블 쿼리, 데이터 하위 테이블)

1. 짧은 주소를 사용하는 이유

짧은 URL을 사용하는 주된 목적은 긴 URL을 더 간결하고 기억하기 쉽고 공유하기 쉽게 만드는 것입니다. 다음은 몇 가지 일반적인 원인입니다.

  1. 아름답고 간결함: 긴 URL은 일반적으로 여러 문자와 매개변수를 포함하는 반면 짧은 URL은 몇 개의 문자로 단순화하여 URL을 더 짧고 깔끔하게 만들 수 있습니다. 이를 통해 사용자 경험을 개선하고 웹사이트를 더욱 아름답게 만들 수 있습니다.

  2. 기억하기 쉬움: 길고 복잡한 URL은 특히 휴대기기 사용자의 경우 기억하기 어려운 경우가 많습니다. 짧은 주소는 일반적으로 기억하기 쉬운 간결한 문자 조합을 사용합니다.

  3. 간편한 공유: 짧은 주소는 소셜 미디어, SMS, 채팅 앱 등과 같이 제한된 공간에서 공유하기에 더 적합합니다. 긴 주소는 잘리거나 줄 바꿈되어 대상 페이지를 제대로 열지 못할 수 있지만 짧은 주소는 이 문제를 피할 수 있습니다.

  4. 실제 주소 숨기기: 일부 민감한 정보나 비밀로 유지해야 하는 콘텐츠의 경우 짧은 주소를 사용하면 실제 대상 URL을 숨길 수 있습니다. 이렇게 하면 일정 수준의 보안이 추가되고 사용자가 긴 주소에 직접 액세스하여 민감한 정보를 얻는 것을 방지할 수 있습니다.

  5. URL 통계 및 모니터링: 단축 주소 서비스 제공자가 제공하는 통계 기능을 사용하여 단축 주소의 클릭 수, 전환율 및 기타 데이터를 추적할 수 있으므로 데이터 분석 및 모니터링에 편리합니다. 이는 마케팅 캠페인, 프로모션 링크 등에 중요한 의미를 갖습니다.

요컨대 짧은 주소를 사용하면 사용자 경험을 개선하고 URL을 단순화하며 공유 및 통계를 용이하게 할 수 있으므로 많은 시나리오에서 고려할 수 있습니다.

2. Short address 구현 방법

  1. 자체 증분 디지털 짧은 코드: 해시 알고리즘을 기반으로 긴 링크에서 짧은 문자열을 생성하고 짧은 문자열과 긴 링크를 데이터베이스에 저장합니다. 짧은 링크를 얻으려면 짧은 문자열을 통해 데이터베이스를 쿼리하여 해당하는 긴 링크를 얻은 다음 사용자를 긴 링크로 리디렉션합니다.

  2. 데이터베이스 자동 증가 ID 변환: 긴 링크의 ID를 62로 변환한 다음 미리 설정된 도메인 이름과 결합하여 짧은 링크를 형성합니다. 짧은 링크를 얻을 때 짧은 링크에 있는 62비트 ID를 통해 긴 링크를 얻은 다음 사용자를 긴 링크로 리디렉션합니다.

  3. bit.ly, goo.gl 등과 같은 타사 짧은 링크 서비스를 사용합니다. 긴 링크를 서비스 제공업체에 제출하고 짧은 링크를 가져와서 데이터베이스에 저장합니다. 짧은 링크를 얻으려면 짧은 링크를 통해 서비스 공급자의 인터페이스로 사용자를 리디렉션하고 긴 링크로 사용자를 리디렉션하도록 합니다.

  4. 자체 짧은 링크 서비스를 기반으로 분산 ID 생성기(예: Snowflake)를 사용하여 고유한 ID를 생성하고 짧은 링크로 변환합니다. 짧은 링크를 얻을 때 짧은 링크의 고유 ID에 따라 긴 링크를 얻고 사용자를 긴 링크로 리디렉션합니다.

3. 실제 개발 사례

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

@ 가끔 누수

Supongo que te gusta

Origin blog.csdn.net/weixin_41290949/article/details/131743960
Recomendado
Clasificación