PHP微博客应用中的URL缩短类
PHP微博客应用中的URL缩短类
在Unix机上的PHP脚本 .class.php可以复用 下面有4个方法用来缩短 加密 解密 DB中的原始URL 并缩短他
结合Apache的rewrite模块进行路由
如传入一个http://index.php/catagory/python-cookbook_3tdedition.php
重写为..index.php/123/512.html
在Apache模块中可以定义 catagory请求为123路由地址
因为是用的单例模式的CONN 处理并发请求 测试的时候MySQL 并发命中会很低
#!usr/local/bin/php <?php /** * 使用单例模式 4个方法 编码 解码 测试 压缩URL * SQL表urls只有2个字 一个自增长的ID 一个varchar的url字符串 * 512增加为了防止传入的url太短 * */ class UrlShortener { const OFFSET = 512; private $base; private $characterMap; public function __construct(){ //初始化私有变量 $this->characterMap = array( '1','2','3','4','5','6','7','8','9', 'z','x','c','b','v', 'f','g','h','j','k','L','m','n', 'q','w','r','t','y','p','s','d' ); $this->base = sizeof($this->characterMap); } public static function getInstance(){ static $instance = null; if($instance === null){ $instance = new UrlShortener(); } return $instance; } public function shorten($conn,$url){ $escapedUrl = mysql_escape_string($url); $res = mysql_query("select 'id' from urls where 'url' like $escapedUrl",$conn); $row = mysql_fetch_row($res); mysql_free_result($res); //如果有 就进行编码 然后重写进入数据库 if($row) return $this->encode($row[0]+self::OFFSET); //如果没有 就先编码后插入 $res = mysql_query(" insert into 'urls'('url') values('$escapedUrl') ",$conn); return $this->encode(mysql_insert_id($conn)+self::OFFSET); } public function encode($val){ #递归对每一个URL中的字符进行解码 #@return 解码以后的字符串Url $val += 512; if($val < $this->base){ return $this->characterMap[ $val ]; }else{ return $this->encode(floor( $val/$this->base)). $this->characterMap[ $val % $this->base]; } } public function decode($val){ $decodeMap = array_flip($this->characterMap);#翻转字典 $parts = array_reverse(str_split( $val )); $index = 0; $i = 0; foreach($parts as $part){ $index += $decodeMap[$part] * pow($this->base,$i++); } return $index-512; } public function expand($conn,$index){ $id = $this->decode($index)-self::OFFSET; $res = mysql_query(' select "url" from "urls" where 'id' = $id ',$conn); $value = (($row = mysql_fetch_row( $res)))?$row[0]:null; mysql_free_result($res); return $value; } }#end class ?>
2. [文件] test4Url.php
#!/usr/local/bin/php <?php //测试一下上面的class include ( "UrlShortener.class.php" ) $shortener = UrlShortener::getInstance(); set_time_limit(0); $stdin = fopen("php://stdin",'r'); while(1){ $index = trim(fgets($stdin)); return $shortener->expand(getDb(),$index).'\n'; } function getDb(){ static $db = null; if(!$db||!mysql_ping($db){ $db = mysql_connect('localhost','user','password'); mysql_select_db("test"); } return $db; } ?>
以上就是PHP微博客应用中的URL缩短类 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.
