>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 URL을 단축 URL로 변환하는 알고리즘 예제 공유

PHP를 사용하여 URL을 단축 URL로 변환하는 알고리즘 예제 공유

墨辰丷
墨辰丷원래의
2018-06-01 11:23:221779검색

짧은 URL은 이름에서 알 수 있듯이 비교적 짧은 형식의 URL입니다. 오늘날 웹 2.0 시대에는 이것이 트렌드라고 말하고 싶습니다. 유사한 서비스가 이미 많이 있습니다. 짧은 URL을 사용하면 원래의 긴 URL을 짧은 URL로 대체하여 사용자가 링크를 더 쉽게 공유할 수 있습니다. PHP를 사용하여 이 기능을 구현하는 방법을 살펴보겠습니다. 필요가 그것을 참조할 수 있습니다.

머리말

URL 단축 서비스는 이제 많은 친구들에게 더 이상 낯설지 않을 것입니다. 이제 Weibo, 휴대폰 이메일 알림 등 대부분의 장소에 많은 애플리케이션 모델이 있으며 특정 시장을 점유하고 있습니다. 현재 많은 친구들이 이용하고 있는 것으로 추정됩니다.

짧은 링크의 이점:

1. 콘텐츠 요구 사항
2. 관리가 용이합니다.

다음은 PHP를 사용한 단축 URL 변환 알고리즘입니다. 코드는 다음과 같습니다.

PHP

<?php
//短网址生成算法
class ShortUrl {
  
  //字符表
  public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
  public static function encode($url)
  {
    $key = &#39;abc&#39;; //加盐
    $urlhash = md5($key . $url);
    $len = strlen($urlhash);
 
    //将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接
    for ($i = 0; $i < 4; $i++) {
      $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);
      
      //将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零
      //此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常
      $hex = hexdec($urlhash_piece) & 0x3fffffff;
 
      //域名根据需求填写
      $short_url = "http://t.cn/";
      
      //生成6位短网址
      for ($j = 0; $j < 6; $j++) {
        
        //将得到的值与0x0000003d,3d为61,即charset的坐标最大值
        $short_url .= self::$charset[$hex & 0x0000003d];
        
        //循环完以后将hex右移5位
        $hex = $hex >> 5;
      }
 
      $short_url_list[] = $short_url;
    }
 
    return $short_url_list;
  }
}
 
$url = "http://www.sunbloger.com/";
$short = ShortUrl::encode($url);
print_r($short);
?>

보통 우리는 4개의 URL 그룹 중 첫 번째 그룹을 사용합니다.

여기서 이 알고리즘은 되돌릴 수 없다는 점에 유의해야 합니다. 따라서 일반적인 접근 방식은 짧은 URL과 해당 원본 URL을 데이터베이스에 저장하는 것입니다. 액세스하면 일치하는 원본 URL이 데이터베이스에서 검색되어 301을 통과합니다. 또는 헤더를 만드십시오.

요약: 위 내용이 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항:

php PDO 예외 처리 방법에 대한 자세한 설명

PHP에서 zip 파일을 읽는 방법

PHP 버전 Single Sign-In 구현 계획

위 내용은 PHP를 사용하여 URL을 단축 URL로 변환하는 알고리즘 예제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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