>php教程 >PHP开发 >PHP 생성 정적 페이지 분석 템플릿 + 캐시 + 파일 작성에 대해 이야기하기

PHP 생성 정적 페이지 분석 템플릿 + 캐시 + 파일 작성에 대해 이야기하기

黄舟
黄舟원래의
2016-12-14 13:24:341303검색

1. 소개
속도 측면에서 정적 페이지는 PHP와 같은 동적 페이지보다 훨씬 빠릅니다. 그러나 정적 페이지의 유연성이 좋지 않기 때문에 데이터베이스를 사용하지 않거나 다른 기기 관련 정보를 저장하면 열람 권한 제한 등 수정 및 편집 등 전반적인 관리가 더욱 번거로워집니다. 다만, 개발된 보도자료 시스템 등 자주 사용하는 일부 파일에 대해서는 별도의 조치를 취하고 있습니다. 결과는 데이터베이스에 표시되므로 한편으로는 서버 리소스를 소비하고 다른 한편으로는 뷰어의 귀중한 응답 시간을 많이 차지합니다. 따라서 "정적 페이지" 접근 방식을 사용합니다. 현재 많은 웹사이트에서 이 기술을 사용하고 있는데, 일반적으로 모두 관리 배경에 의해 제어되거나, 직접 표시하기 위해 html을 생성하거나, css로 표시를 제어하기 위해 xhtml을 사용하거나, xslt로 표시용 xml을 생성하는 등의 기술은 어렵지 않습니다.
2. 기본 지식
템플릿 기술 :
[PHP] 템플릿 엔진 Smarty에 대한 심층 소개--2005-12-31
[PHP] 구성 및 Smarty 기술 사용에 대해 이야기하기--2006-01-04
캐싱 기술:
자주 변하지 않지만 여전히 변경될 수 있는 정보와 같은 일부 정보는 속도를 높이기 위해 캐시에 배치됩니다. 이는 매우 가치 있는 정보로, 일반적으로 서버 측에 저장된 일부 공유 정보로 이해되며, 캐시를 저장할 때 다음 업데이트에 대한 판단을 지정할 수 있습니다. 예를 들어, 5분마다 업데이트해야 하는 경우 마지막 업데이트 시간을 기록하여 현재 시간과 비교할 수 있습니다. 5분보다 크면 데이터베이스를 읽고 업데이트하고, 그렇지 않으면 캐시된 데이터를 읽습니다. 물론, 캐시는 클라이언트 사용자에 의해 활성화되어야 하며 한 번만 활성화하면 됩니다.
ob_start() 함수: 출력 버퍼를 엽니다.
함수 형식 void ob_start(void)
: 버퍼가 활성화되면 PHP 프로그램에서 파일 헤더 정보가 아닌 모든 정보는 전송되지 않고 내부 버퍼에 저장됩니다. 버퍼의 내용을 출력하려면 ob_end_flush() 또는 플러시()를 사용하여 버퍼의 내용을 출력할 수 있습니다.
플러시: 버퍼 및 출력의 내용을 새로 고칩니다.
함수 형식: 플러시()
설명: 이 함수는 자주 사용되며 매우 효율적입니다.
ob_get_contents: 내부 버퍼의 내용을 반환합니다.
함수 형식: 문자열 ob_get_contents(void)
설명: 이 함수는 현재 버퍼의 내용을 반환합니다. 출력 버퍼가 활성화되지 않은 경우 FALSE를 반환합니다.
ob_get_length: 버퍼의 길이를 반환합니다. 내부 버퍼.
함수 형식: int ob_get_length(void)
설명: 이 함수는 ob_get_contents와 같이 현재 버퍼의 길이를 반환하며, 출력 버퍼가 활성화되지 않은 경우 FALSE를 반환합니다.
ob_end_clean: 내부를 삭제합니다.
함수 형식: void ob_end_clean(void)
설명: 이 함수는 내부 버퍼의 내용을 출력하지 않고 삭제합니다.
ob_end_flush: 내부 버퍼의 내용을 브라우저를 닫고 출력 버퍼를 닫습니다.
함수 형식: void ob_end_flush(void)
설명: 이 함수는 출력 버퍼의 내용을 보냅니다(있는 경우).
ob_implicit_flush: 절대 새로 고침을 켜거나 끕니다.
함수 형식: void ob_implicit_flush([int 플래그])
설명: 기본값은 버퍼를 닫는 것입니다. 절대 출력을 켠 후 각 스크립트 출력은 브라우저로 직접 전송되며 플러시(를 호출할 필요가 없습니다. )
파일 쓰기:
int fwrite (리소스 핸들, 문자열 문자열 [, int 길이])
fwrite()는 문자열의 내용을 파일 포인터 핸들에 씁니다. length가 지정되면 length 바이트가 기록되거나 문자열이 기록될 때 중 먼저 발생하는 시점에 쓰기가 중지됩니다.
fwrite()는 작성된 문자 수를 반환하거나, 오류가 발생하면 FALSE를 반환합니다.
관련 참고 공식 홈페이지: 파일 참고
3. 해결 방법
아이디어: ob_start 버퍼를 켜고, 데이터가 전송되면 ob_get_contents를 가져온 다음, 정적 페이지를 생성하고, ob_end_clean 버퍼를 지웁니다.ok, 그게 다입니다. , 예를 살펴보겠습니다(php+mysql 조합):
데이터베이스 생성:

다음과 같이 코드를 복사합니다.
Create TABLE `bihtml` (
`id` int(11 ) NOT NULL auto_increment,
`szdtitle` varchar(16) NOT NULL,
`szdcontent` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE

Get 현재 ID 및 가져오기 템플릿:

다음과 같이 코드를 복사하세요.
ob_start();
$id=_POST['id']
if(!isset($id)&is_integer($id))
{
@$db=new mysqli('localhost','root','admin','bihtml')
$result=$db->fetch_one_array("select * from szd_bi where id='$id ' ");
if(!emptyempty($result))
{
$tmp->할당(array(
"Szdtitle",htmlspecialchars($result['titles']),
"Szdcontent",$result['titles']));
}
$tpl->display('default_1.tpl')
$this_my_f= ob_get_contents(); 이 핵심 사항은
ob_end_clean();
$filename = "$id.html";
if(tohtmlfile_cjjer($filename,$this_my_f))
echo "$filename"; > else
echo "인식 생성";
}

//파일 생성 과정을 함수로 작성

function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)

{
if (is_file ($file_cjjer_name)){
@unlink ($file_cjjer_name);
}
$cjjer_handle = fopen ($file_cjjer_name,"w"); is_writable($file_cjjer_name)){
return false;
}
if (!fwrite($cjjer_handle,$file_cjjer_content)){
return false
}
fclose($cjjer_handle) ); //포인터 닫기
return $file_cjjer_name;
}

IV. 참고
1: 일반적으로 관리자는 데이터를 추가할 때 정적 페이지를 생성하고 생성된 페이지를 기록하는 것을 고려할 수 있습니다.

2: PHP에는 주로 ob_starts() 및 ob_get_contents가 포함되어 있으며 이는 정적 페이지를 생성할 때 매우 유용합니다. 물론 템플릿의 변수를 직접 대체하기 위해 데이터베이스를 호출하는 것도 고려할 수 있습니다. >3: 기본 템플릿 smarty 또는 phplib를 사용할 수 있습니다. Smarty는 비교적 사용하기 쉽습니다.


위 기사 내용이 모든 사람에게 도움이 되기를 바랍니다. 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요. www.php.cn)!

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