PHP 개발 전투 분석 시리즈 카탈로그
- PHP 개발의 실용 분석(1): mysql 연산 필드(멀티 데이터 테이블에서 다중 필드 추가, 삭제, 수정, 추가)
- php 개발의 실용 분석 (2) : 쿠키의 동적 사용 (설정, 획득, 삭제, 원리가 마음에 드셨는지 추측, 장바구니 호출)
- php 개발의 실용 분석 (3) : php에서 변수가 비어있는지(0, false, null) 판단하는 방법
- PHP 개발의 실제 분석(4): PHP 호출 캡슐화 기능에는 다양한 디렉토리에 대한 파일 경로 적응 솔루션이 포함되어 있습니다($_SERVER['DOCUMENT_ROOT'] 및 __DIR__ 매직 상수).
- PHP 개발의 실제 분석(5): 파일 및 디렉토리 작업
- PHP 개발의 실용 분석(6): 구성 파일 또는 캐시 파일의 생성 및 호출
- PHP 개발의 실용 분석(7): mysql 라이브러리 작업의 고급 사용
- PHP 개발 실용 분석(8): mysql 클래스 라이브러리 운영을 위한 API 개발 고급 활용(필드 운영, 권한 할당, 날짜 형식, 교차 테이블 쿼리, 데이터 하위 테이블)
PHP 개발의 실용 분석 9: 솔루션을 사용하여 짧은 주소 공유 실현
1. 짧은 주소를 사용하는 이유
짧은 URL을 사용하는 주된 목적은 긴 URL을 더 간결하고 기억하기 쉽고 공유하기 쉽게 만드는 것입니다. 다음은 몇 가지 일반적인 원인입니다.
-
아름답고 간결함: 긴 URL은 일반적으로 여러 문자와 매개변수를 포함하는 반면 짧은 URL은 몇 개의 문자로 단순화하여 URL을 더 짧고 깔끔하게 만들 수 있습니다. 이를 통해 사용자 경험을 개선하고 웹사이트를 더욱 아름답게 만들 수 있습니다.
-
기억하기 쉬움: 길고 복잡한 URL은 특히 휴대기기 사용자의 경우 기억하기 어려운 경우가 많습니다. 짧은 주소는 일반적으로 기억하기 쉬운 간결한 문자 조합을 사용합니다.
-
간편한 공유: 짧은 주소는 소셜 미디어, SMS, 채팅 앱 등과 같이 제한된 공간에서 공유하기에 더 적합합니다. 긴 주소는 잘리거나 줄 바꿈되어 대상 페이지를 제대로 열지 못할 수 있지만 짧은 주소는 이 문제를 피할 수 있습니다.
-
실제 주소 숨기기: 일부 민감한 정보나 비밀로 유지해야 하는 콘텐츠의 경우 짧은 주소를 사용하면 실제 대상 URL을 숨길 수 있습니다. 이렇게 하면 일정 수준의 보안이 추가되고 사용자가 긴 주소에 직접 액세스하여 민감한 정보를 얻는 것을 방지할 수 있습니다.
-
URL 통계 및 모니터링: 단축 주소 서비스 제공자가 제공하는 통계 기능을 사용하여 단축 주소의 클릭 수, 전환율 및 기타 데이터를 추적할 수 있으므로 데이터 분석 및 모니터링에 편리합니다. 이는 마케팅 캠페인, 프로모션 링크 등에 중요한 의미를 갖습니다.
요컨대 짧은 주소를 사용하면 사용자 경험을 개선하고 URL을 단순화하며 공유 및 통계를 용이하게 할 수 있으므로 많은 시나리오에서 고려할 수 있습니다.
2. Short address 구현 방법
-
자체 증분 디지털 짧은 코드: 해시 알고리즘을 기반으로 긴 링크에서 짧은 문자열을 생성하고 짧은 문자열과 긴 링크를 데이터베이스에 저장합니다. 짧은 링크를 얻으려면 짧은 문자열을 통해 데이터베이스를 쿼리하여 해당하는 긴 링크를 얻은 다음 사용자를 긴 링크로 리디렉션합니다.
-
데이터베이스 자동 증가 ID 변환: 긴 링크의 ID를 62로 변환한 다음 미리 설정된 도메인 이름과 결합하여 짧은 링크를 형성합니다. 짧은 링크를 얻을 때 짧은 링크에 있는 62비트 ID를 통해 긴 링크를 얻은 다음 사용자를 긴 링크로 리디렉션합니다.
-
bit.ly, goo.gl 등과 같은 타사 짧은 링크 서비스를 사용합니다. 긴 링크를 서비스 제공업체에 제출하고 짧은 링크를 가져와서 데이터베이스에 저장합니다. 짧은 링크를 얻으려면 짧은 링크를 통해 서비스 공급자의 인터페이스로 사용자를 리디렉션하고 긴 링크로 사용자를 리디렉션하도록 합니다.
-
자체 짧은 링크 서비스를 기반으로 분산 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("短域名参数错误,无法正常访问。");
@ 가끔 누수