PHP에서 단축 URL을 구현하는 방법
1. 배경 소개
많은 분들이 휴대폰으로 마케팅 문자 메시지를 받아보셨을 텐데요, 문자 메시지에는 아래와 같은 URL이 포함되어 있을 때가 있습니다
이 URL은 다음과 같습니다. 매우 짧은 경우가 많지만, 자세히 보면 중간에 점프가 있는 것을 볼 수 있습니다. 브라우저 주소 표시줄에 표시되는 URL은 문자 메시지에 표시되는 URL이 아닙니다.
2. 원리 및 적용
짧은 URL은 일반적으로 매우 짧은 도메인 이름을 사용하며, 경로 매개변수는 일반적으로 3~6자로만 구성되므로 매우 간결합니다!
짧은 URL을 사용하는 전제는 짧은 URL을 먼저 생성하는 것입니다. 주로 특정 알고리즘을 사용하여 짧은 문자를 긴 문자에 대응하도록 합니다. 예를 들어 일반적으로 사용되는 0~9의 62자 중에서 6자를 선택합니다. , a-z 및 A-Z 문자로 구성됩니다. 이는 62의 6승 조합이 가능하며 약 568억 개의 고유 단축 URL이 있음을 의미합니다.
서버는 path 매개변수를 통해 실제 긴 URL을 쿼리한 다음 301/302를 사용하여 실제 URL로 이동합니다!
리디렉션과 관련하여 301은 영구 리디렉션이고 302는 임시 리디렉션입니다. 짧은 주소는 일단 생성되면 변경되지 않으므로 301을 사용하는 것은 http 의미 체계와 일치하며 브라우저는 점프 주소를 기록하는 동시에 서버에 대한 부담을 어느 정도 줄여줍니다. 하지만 301을 사용하면 짧은 주소를 클릭한 횟수를 계산할 수 없게 되므로 데이터 통계에 대한 요구 사항이 있는 경우 302 점프를 사용하는 것이 더 나을 수도 있습니다.
짧은 URL의 주요 이점은 특히 문자 메시지에 사용할 때 전송 및 기억이 편리하다는 것입니다. SMS는 콘텐츠의 단어 수에 제한이 있습니다. 예를 들어 짧은 URL은 Weibo에서 공유하는 데에도 사용됩니다. !
3. 시중에 나와있는 기존 사례
시중에는 무료 단축링크 서비스가 많이 있으며 기능은 기본적으로 동일하고 제한이 없습니다!
(1) Baidu의 짧은 링크(dwz.cn/), Baidu는 웹페이지 입구를 제공할 뿐만 아니라 간단하고 사용하기 쉬운 인터페이스와 개발 문서도 제공합니다!
(2) 시나의 단축링크(sina.lt/)는 현재 웹페이지 진입만 제공하고, 인터페이스 서비스는 발견되지 않았습니다!
(3) 타오바오 단축링크(tb.am/)는 현재 웹페이지 진입만 제공하고, 인터페이스 서비스는 발견되지 않았습니다!
시중에는 짧은 링크 서비스를 제공하는 소규모 회사가 많이 있는데 일부는 부분적으로 무료이고 일부 짧은 링크는 유효하므로 여기서는 하나씩 소개하지 않겠습니다!
4. 일반적으로 사용되는 알고리즘
인터넷에서 가장 많이 사용되는 알고리즘으로는 기본 알고리즘, 다이제스트(해시) 알고리즘, 난수 알고리즘이 있습니다.
기본 알고리즘입니다.
이 알고리즘은 인터넷에서 자동 증가 시퀀스 알고리즘이라고도 합니다. ID를 자동 증가로 설정하는 것이 특징입니다. 10진수 ID는 1부터 1까지입니다. 따라서 중복이 발생하지 않습니다. 이 용도는 낮은 베이스에서 높은 베이스로 변환할 때 문자 수가 줄어드는 것이 특징입니다. 컴퓨터의 일반적인 진법에는 2진수, 8진수, 10진수, 16진수 등이 있습니다. 진수가 클수록 표현할 수 있는 숫자는 늘어나고 차지하는 단어는 줄어듭니다. 예를 들면 다음과 같습니다. 10진수로 1000은 8진수로 1750이고 16진수로는 3E8입니다. 어떤 사람들은 컴퓨터에 62진수가 없다고 말합니다. . . 비록 사람은 없지만, 진수 변환 알고리즘은 정해져 있습니다. 가장 일반적인 것은 "나누기 방식"입니다! 16진수 문자 시퀀스는 0-9a-zA-Z라고 가정합니다. 순서가 깨질 수 있지만 0부터 61까지 시작하는 배열입니다. 지금은 알파벳이라고 부르겠습니다. ====> 1000/62 = 16, 나머지 8====> 16/62 = 0, 나머지 16나머지 숫자는 16과 8입니다. 알파벳 16과 8의 문자를 합쳐서 쓰면 g8인데 2자리로 아주 짧습니다! 최소 6자를 생성하려면 비교적 큰 숫자로 시작할 수 있습니다. 자세한 내용은 아래 그림을 참조하세요. 1자리 62 0 - 61 2자리 3844 62 - 3843 3자리 약 233,844 - 238327 4 정보 1400만 자리 238328 - 14776335 5자리 약 9억 1천만 14776336 - 916132831 6자리 약 568억 916132832 - 56800235583 코드 복사II. 첫 번째 방법:
간단한 긴 링크 salt md5를 추가하면 32비트 문자열을 생성하고 그 중에서 무작위로 6자를 선택하거나 단순히 마지막 6자리를 선택하지만 md5에는 알파벳 문자보다 적은 0-9A-Fa-f만 포함되어 있으므로 충돌 가능성은 다음과 같습니다. 보다 큰!
두 번째 방법:
1. 긴 URL md5에서 32비트 서명 문자열을 생성하고 4개 세그먼트로 나누어 각 세그먼트는 8바이트입니다.
2. 이 4개 루프 처리 섹션에서는 8바이트를 가져와서 16진수 문자열로 처리하고 0x3fffffff(30비트 1)로 작동합니다. 즉, 30비트 이상의 처리를 무시합니다
3. 6개의 세그먼트, 각 5자리 숫자는 알파벳의 색인으로 사용되어 특정 문자를 얻습니다. 6자리 문자열은 순차적으로 얻습니다.
4 총 md5 문자열은 4개의 6자리 문자열을 얻을 수 있으며, 그 중 하나를 이렇게 긴 URL로 사용할 수 있습니다. 단축 URL 주소
는 좀 더 복잡한 방식으로 생성되어 중복 확률은 낮지만 충돌은 계속 발생합니다!
3. 난수 알고리즘
이것이 더 간단합니다. 62자 배열을 무작위로 선택하고 그 중 6개를 짧은 링크 코드로 선택하면 됩니다. 간단하고 사용하기 쉽지만 중복 충돌이 발생합니다!
4. 알고리즘 비교
첫 번째 알고리즘은 자체 증가 ID 문제를 해결하는 한 충돌을 피할 수 있습니다. 각 단축 코드 생성은 데이터베이스의 자체 증가 기본 키를 사용할 수 있습니다. 단 하나의 데이터베이스 작업(삽입 작업)이 필요하며 기본 키 ID를 가져온 다음 단축 코드를 계산합니다.
두 번째와 세 번째 알고리즘은 실제로 유사하며 둘 다 프로그램 무작위성에 의존하고 충돌이 발생하기 쉬우므로 심각한 판단이 필요합니다. 데이터베이스에 삽입할 때마다 효율성이 떨어집니다.
5. 보안
짧은 링크는 전송 및 메모리를 용이하게 하지만 링크의 문자 수가 적기 때문에 공격자가 모든 문자로 구성된 링크를 쉽게 통과할 수 있습니다.
따라서 비밀번호 재설정 링크와 같은 개인 URL을 전송하기 위해 짧은 링크를 사용하는 것은 권장되지 않으며, 일부 권한과 민감한 정보가 포함된 링크의 경우 2차 인증을 수행해야 합니다!
추천 튜토리얼: Laravel 실용 개발 짧은 링크 생성기 비디오 튜토리얼
위 내용은 PHP에서 단축 URL을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alipay PHP ...

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

세션 납치는 다음 단계를 통해 달성 할 수 있습니다. 1. 세션 ID를 얻으십시오. 2. 세션 ID 사용, 3. 세션을 활성 상태로 유지하십시오. PHP에서 세션 납치를 방지하는 방법에는 다음이 포함됩니다. 1. 세션 _regenerate_id () 함수를 사용하여 세션 ID를 재생산합니다. 2. 데이터베이스를 통해 세션 데이터를 저장하십시오.

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

PHP8.1의 열거 기능은 명명 된 상수를 정의하여 코드의 명확성과 유형 안전성을 향상시킵니다. 1) 열거는 정수, 문자열 또는 객체 일 수 있으며 코드 가독성 및 유형 안전성을 향상시킬 수 있습니다. 2) 열거는 클래스를 기반으로하며 Traversal 및 Reflection과 같은 객체 지향적 특징을 지원합니다. 3) 열거는 유형 안전을 보장하기 위해 비교 및 할당에 사용될 수 있습니다. 4) 열거는 복잡한 논리를 구현하는 방법을 추가하는 것을 지원합니다. 5) 엄격한 유형 확인 및 오류 처리는 일반적인 오류를 피할 수 있습니다. 6) 열거는 마법의 가치를 줄이고 유지 관리를 향상 시키지만 성능 최적화에주의를 기울입니다.

phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? PHPStorm으로 개발할 때 때때로 CLI (Command Line Interface) 모드에서 PHP를 디버그해야합니다 ...

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.
