>  기사  >  백엔드 개발  >  PHP 페이지 캐싱 방법_php 팁 요약

PHP 페이지 캐싱 방법_php 팁 요약

WBOY
WBOY원래의
2016-05-16 20:25:541259검색

이 글의 예시는 PHP 페이지 캐싱 방법을 요약한 것입니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

ob 시리즈 함수는 ob_start(), ob_end_flush(), ob_get_contents()와 같은 PHP 페이지 캐싱에 주로 사용되지만 고급 캐싱에서는 이러한 함수를 사용하지 않습니다. 이 기사에서는 설명을 위해 마지막에 예제를 제공합니다. .

먼저 캐싱에 일반적으로 사용되는 ob 시리즈 기능을 살펴보겠습니다.

ob_start():페이지 캐싱 시작 기호입니다. 이 함수의 내용은 ob_end_flush() 또는 ob_end_clean()까지 페이지 캐시에 저장됩니다.

ob_get_contents(): 은 페이지 캐시의 콘텐츠를 얻는 데 사용됩니다. 콘텐츠를 얻은 후 원하는 대로 콘텐츠를 처리하고, 필드를 필터링하고, 콘텐츠를 일치시키는 등의 작업을 할 수 있습니다~ ~~

ob_end_flush(): 은 페이지 캐싱이 끝났음을 의미하며, 제가 확인한 대로 캐싱된 내용이 현재 페이지에 출력됩니다. 즉, 캐싱된 내용을 표시할 수 있습니다.

이 세 가지 PHP 기능을 사용하면 강력한 기능을 얻을 수 있습니다. 데이터베이스 쿼리 볼륨이 큰 경우 캐시를 사용하여 이 문제를 해결할 수 있습니다.

다음은 인코딩 부분입니다.

1. 초기화 기능은 일반적으로 페이지 캐시 경로, 캐시 파일 이름 지정 형식 등을 설정하며, 여기서 사용되는 식별 ID는 마지막에 암호화된 $_SERVER[REQUEST_URI] 매개변수입니다. 이 함수에는 if 판단이 있습니다. 캐시 기간이 지나지 않았다면 캐시 파일을 로드하고, 그렇지 않으면 소스 파일을 로드합니다.


코드 복사 코드는 다음과 같습니다.
function page_init()
{ 
$url = $_SERVER['REQUEST_URI'];//하위 URL, 이 매개변수는 일반적으로 고유합니다.
$페이지ID = md5($url)
$dir = str_replace('/','_',substr($_SERVER['SCRIPT_NAME'],1,-4))
//exp_index와 같은 디렉터리 이름 지정 방법
If(!file_exists($pd = PAGE_PATH.$dir.'/'))@mkdir($pd,0777) 또는 die("$pd 디렉터리 생성 실패"); //예: 캐시/페이지/exp_index/
Define('PAGE_FILE',$pd.$pageid.'.html')
​ ​ //cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html
등 $contents = file_get_contents(PAGE_FILE);//읽기

If($contents && substr($contents, 13, 10) > time() )//page_cache() 함수에 추가된 사용자 정의 헤더에 해당합니다
{
echo substr($contents, 27)
종료(0); }  
true를 반환합니다.
}

2. 페이지 캐시 기능 여기서는 헤더 정보(만료 시간)를 캐시 파일의 내용에 추가하므로 매번 헤더의 만료 시간을 page_init( )에서 비교하면 됩니다. 함수를 사용하면 캐시가 만료되었는지 확인할 수 있습니다. 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다.function page_cache($ttl = 0) {
$ttl = $ttl ? $ttl : PAGE_TTL;//캐시 시간, 기본 3600초
$contents = ob_get_contents();//캐시에서 콘텐츠 가져오기
$contents = "n".$contents
​ ​ //커스텀 헤더 추가: 만료 시간 = 생성 시간 캐시 시간
File_put_contents(PAGE_FILE, $contents);//캐시 파일에 쓰기
Ob_end_flush();//캐시 해제
}

3. 함수를 사용할 때 이 두 함수가 순차적으로 실행된다는 점에 유의하세요. 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다. Page_init();//페이지 캐시 초기화
>     
...//코드 세그먼트

Page_cache(60);//보통 마지막 줄

?>

예제 2. PHP 페이지 캐싱 기술을 설명하는 예제는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
$_시간 =10
$dir="D:php"

함수 캐시 시작($_time, $dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html'
$cachetime = $_time
ob_start()
if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime))
{
include($cachefile)
Ob_end_flush()
종료
}
}

함수 캐시_end($dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html'
$fp = fopen($cachefile, 'w')
fwrite($fp, ob_get_contents())
fclose($fp)
ob_end_flush()
}

캐시_시작($_time, $dir)
//다음은 캐시_시작과 캐시_종료 메소드 사이에 배치된 출력 내용입니다.
($i=0;$i<5;$i )
{
에코 $i; 수면(1)
}
캐시_끝($dir)
?>
예를 들어 캐싱을 위해 생성된 파일을 사용하는 경우 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
ob_start()
/**
* @작가 허밍휘
* @copyright 2009-3-13
* @param string $cache_folder 캐시 폴더
* @param int $cache_create_time 파일 캐시 시간
* @example $cache=new Esj_Cache('./_cache',100)
* @example $cache->read_cache()는 캐시를 읽고 출력합니다
* @example $cache->creatre_cache()는 캐시 파일을 생성합니다(파일 끝에 넣습니다)
* @example $cache->list_file()은 모든 캐시 파일 목록을 반환합니다
* @example $cache->del_file()은 모든 캐시 파일을 삭제합니다
*/

클래스 Esj_Cache{
개인 $cache_folder=null;//cacher 폴더
개인 $wroot_dir=null;//사이트 디렉토리
private $cacher_create_time=null;//캐셔 파일 생성 시간

공개 함수 __construct($cache_foldername,$cacher_time=100)
{
ob_start()
$this->wroot_dir=$_SERVER['DOCUMENT_ROOT']
$this->cache_folder=$cache_foldername
$this->cacher_create_time=$cacher_time
}

공개 함수 read_cache()
{
{
을 시도해 보세요. if(self::create_folder($this->cache_folder))
{
self::get_cache();//캐시 파일 정보 출력
}그밖에
{
echo "캐시 폴더 생성 실패!"; 거짓을 반환
}

}catch(예외 $e){
에코 $e; 거짓을 반환
}
}

//캐시 폴더가 있는지 테스트
개인 함수 존재_폴더($foler)
{
if(file_exists($this->wroot_dir."/".$foler)){

사실을 반환합니다. }else {
거짓을 반환
}
}

//새 폴더 생성
개인 함수 create_folder($foler)
{
if(!self::exist_folder($foler))
{
시도해 보세요{
mkdir($this->wroot_dir."/".$foler,0777); chmod($this->wroot_dir."/".$foler,0777);
사실을 반환합니다. }catch(예외 $e)
{
self::get_cache();//출력 캐시
거짓을 반환
}
거짓을 반환
}
그렇지 않으면
{

사실을 반환합니다. }
}

//캐시 파일 읽기
개인 함수 get_cache()
{
$file_name=self::get_filename()
if (file_exists($file_name)&&((filemtime($file_name) $this->cacher_create_time) > time()))
{
$content=file_get_contents($file_name)
if($content)
{
에코 $ 내용
ob_end_flush()
종료
}그밖에
{
echo "파일 읽기 실패"; 종료

}

}
}

//파일 이름을 반환합니다
개인 함수 get_filename()
{
$filename=$file_name=$this->wroot_dir.'/'.$this->cache_folder.'/'.md5($_SERVER['QUERY_STRING']).".html"
$파일명 반환
}

//캐시 파일 생성
공개 함수 create_cache()
{
$filename=self::get_filename()
if($filename!="")
{
시도해 보세요{
file_put_contents($filename,ob_get_contents())

사실을 반환합니다. }catch(예외 $e)
{
echo "캐시 쓰기 실패:".$e; 종료(); }

사실을 반환합니다. }
}

// 캐시에 있는 모든 파일 가져오기
공개 함수 list_file()
{
$path=$this->cache_folder
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$경로."/".$파일
if(file_exists($path1))
{
$결과[]=$파일
}
}
}
closeir($핸들)
}
$결과 반환
}

//캐시에 있는 모든 파일 삭제
공개 함수 del_file()
{
$path=$this->cache_folder
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$경로."/".$파일
if(file_exists($path1))
{
연결 해제($path1)
}
}
}
closeir($핸들)
}

사실을 반환합니다. }

}

?>


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