백엔드 개발 PHP 튜토리얼 PHP 페이지 캐싱 방법_php 팁 요약

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

May 16, 2016 pm 08:25 PM
php 방법 은닉처 페이지

이 글의 예시는 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 = "<!--page_ttl:".(time() $ttl)."-->n".$contents
​ ​ //커스텀 헤더 추가: 만료 시간 = 생성 시간 캐시 시간
File_put_contents(PAGE_FILE, $contents);//캐시 파일에 쓰기
Ob_end_flush();//캐시 해제
}

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


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

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

?>

예제 2. PHP 페이지 캐싱 기술을 설명하는 예제는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
<?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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP 빠른 가이드

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

See all articles