>  기사  >  백엔드 개발  >  PHP에서 단축 URL을 구현하는 방법

PHP에서 단축 URL을 구현하는 방법

步履不停
步履不停원래의
2019-06-06 11:08:206902검색

PHP에서 단축 URL을 구현하는 방법

1. 배경 소개

많은 분들이 휴대폰으로 마케팅 문자 메시지를 받아보셨을 텐데요, 문자 메시지에는 아래와 같은 URL이 포함되어 있을 때가 있습니다

이 URL은 다음과 같습니다. 매우 짧은 경우가 많지만, 자세히 보면 중간에 점프가 있는 것을 볼 수 있습니다. 브라우저 주소 표시줄에 표시되는 URL은 문자 메시지에 표시되는 URL이 아닙니다.

PHP에서 단축 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.