PHP 생 성 정적 페이지 설명

저작권 성명:임의로 전재 할 수 있 습 니 다.전재 할 때 반드시 하이퍼링크 형식 으로 글 의 원본 출처 와 작가 정보 와 본 성명 의 본 고 는 다음 과 같이 표시 해 주 십시오.http://www.otm.cn 작성 자:Matrix@Two_맥 스,우 리 는 먼저 기본 적 인 개념 을 되 돌아 보 았 다.1.PHP 스 크 립 트 와 동적 페이지.PHP 스 크 립 트 는 서버 엔 드 스 크 립 트 프로그램 으로 삽입 등 방법 으로 HTML 파일 과 혼합 할 수도 있 고 클래스,함수 패 키 징 등 형식 으로 템 플 릿 으로 사용자 요청 을 처리 할 수도 있 습 니 다.어떤 방식 으로 든 그 기본 원 리 는 이렇다.클 라 이언 트 가 요청 합 니 다.한 페이지 를 요청 합 니 다.웹 서버 에서 지정 한 스 크 립 트 를 도입 하여 처리 합 니 다.->스 크 립 트 가 서버 에 불 러 옵 니 다.->서버 에서 지정 한 PHP 해상도 기 가 스 크 립 트 를 해석 하여 HTML 언어 형식 을 만 듭 니 다.->분 석 된 HTML 문 구 를 패키지 로 브 라 우 저 에 전송 합 니 다.이 를 통 해 페이지 가 브 라 우 저 에 전송 되면 PHP 가 존재 하지 않 고 HTML 구문 으로 해석 되 었 음 을 알 수 있다.클 라 이언 트 요청 은 동적 파일 입 니 다.실제 파일 이 존재 하지 않 습 니 다.PHP 에서 해당 하 는 페이지 로 분석 한 다음 브 라 우 저 로 보 냅 니 다.이런 페이지 처리 방식 은'동적 페이지'라 고 불 린 다.2.정적 페이지.정적 페이지 란 서버 쪽 에 HTML 과 JS,CSS 등 클 라 이언 트 만 스 크 립 트 를 실행 하 는 페이지 를 말 합 니 다.그것 의 처리 방식 은?클 라 이언 트 가 요청 하여 특정한 페이지->WEB 서버 에 확인 하고 특정한 페이지 를 불 러 오 라 고 요청 합 니 다->WEB 서버 는 이 페이지 를 패키지 로 브 라 우 저 에 전달 합 니 다.이 과정 에서 우 리 는 동적 페이지 를 비교 해 보면 바로 나타 날 수 있다.동적 페이지 는 WEB 서버 의 PHP 해상도 기 에 의 해 분석 되 어야 하 며,일반적으로 데이터 베 이 스 를 연결 하여 데이터베이스 액세스 작업 을 해 야 HTML 언어 정보 팩 을 형성 할 수 있 습 니 다.한편,정적 페이지 는 분석 할 필요 가 없고 데이터 베 이 스 를 연결 하지 않 고 직접 보 내 면 서버 의 압력 을 크게 줄 이 고 서버 부하 능력 을 향상 시 키 며 페이지 의 오픈 속도 와 사이트 의 전체적인 오픈 속 도 를 대폭 제공 할 수 있다.그러나 요청 을 동적 으로 처리 할 수 없고 서버 에 이 파일 이 존재 해 야 한 다 는 단점 이 있다.3.템 플 릿 및 템 플 릿 분석.템 플 릿 은 내용 html 파일 을 채 우지 않 았 습 니 다.temp.html  Code:      { title }       this is a { file } file's templets   PHP 처리:templetest.php  Code:      $title="PHP 애호가 테스트 템 플 릿";  $file   = "TwoMax Inter test templet,author:Sheyi"; $fp          = fopen ("temp.html","r");  $content  = fread ($fp,filesize ("temp.html"));  $content .= str_replace ("{ file }",$file,$content);  $content .= str_replace ("{ title }",$title,$content);  echo $content;?>  템 플 릿 분석 처리,PHP 스 크 립 트 분석 처 리 를 거 쳐 나 올 결과(content)를 템 플 릿 에 채 우 는 처리 과정 입 니 다.보통 템 플 릿 류 의 도움 을 받는다.현재 유행 하 는 템 플 릿 분석 류 는 phplib,smarty,fastsmarty 등 이 있다.템 플 릿 해석 처리 의 원 리 는 일반적으로 교체 된다.또한 일부 프로그래머 들 은 판단,순환 등 처 리 를 템 플 릿 파일 에 넣 고 해석 류 로 처리 하 는 습관 이 있 습 니 다.전형 적 인 응용 은 block 개념 이 고 쉽게 말 하면 순환 처리 입 니 다.PHP 스 크 립 트 에서 순환 횟수,순환 대 입 방법 등 을 지정 하고 템 플 릿 분석 클래스 에서 구체 적 으로 실행 합 니 다.자,정적 페이지 와 동적 페이지 각자 의 우열 을 비교 해 보 았 습 니 다.이제 PHP 로 정적 파일 을 만 드 는 방법 에 대해 말씀 드 리 겠 습 니 다.PHP 가 정적 페이지 를 만 드 는 것 은 PHP 의 동적 해석 을 말 하 는 것 이 아니 라 HTML 페이지 를 출력 하 는 것 을 말 합 니 다.PHP 로 HTML 페이지 를 만 드 는 것 을 말 합 니 다.또한 HTML 의 쓰기 불가능 성 때문에 우리 가 만 든 HTML 이 수정 되면 삭제 하고 다시 만 들 면 됩 니 다.(물론 당신 도 정규 로 수정 하 는 것 을 선택 할 수 있 지만,개인 적 으로 그렇게 하 는 것 은 삭제 하고 다시 만 드 는 것 이 빠 르 고,얻 는 것 보다 잃 는 것 이 많다 고 생각 합 니 다.)본론 으로 돌아가다.PHP 파일 조작 함 수 를 사용 한 PHP FANS 는 PHP 에 파일 을 여 는 파일 조작 함수 fopen 이 있다 는 것 을 알 고 있 습 니 다.파일 이 존재 하지 않 으 면 생 성 을 시도 합 니 다.이것 이 바로 PHP 가 HTML 파일 을 만 드 는 데 사용 할 수 있 는 이론 적 기초 이다.HTML 파일 을 저장 할 폴 더 에 쓰기 권한(즉 권한 정의 0777)이 있 으 면 파일 을 만 들 수 있 습 니 다.(유 닉 스 시스템 에 있어 서 Win 시스템 은 고려 할 필요 가 없다.)위의 예 를 들 어 마지막 문장 을 수정 하고 test 디 렉 터 리 에 test.html 라 는 정적 파일 을 만 들 도록 지정 하면:  Code:      $title="타 오 마 이 국제 테스트 템 플 릿";  $file   = "TwoMax Inter test templet,author:Matrix@Two_Max"; $fp          = fopen ("temp.html","r");  $content  = fread ($fp,filesize ("temp.html"));  $content .= str_replace ("{ file }",$file,$content);  $content .= str_replace ("{ title }",$title,$content);  // echo $content;  $filename = "test/test.html";  $handle    = fopen ($filename,"w"); //파일 포인터 열기,파일 만 들 기  /*파일 이 생 성 되 고 쓸 수 있 는 지 확인 합 니 다.  */  if (!is_writable ($filename)){      die("파일:".$filename."쓸 수 없습니다.속성 을 확인 하고 다시 시도 하 십시오!");  }  if (!fwrite ($handle,$content)){  //파일 에 정보 쓰기     die("파일 생 성".$filename."실패!");  }   fclose ($handle); //닫 기 포인터  die("파일 생 성".$filename."성공!");?>    실제 응용 에서 흔히 볼 수 있 는 문제 해결 방안 참고:하나,글 목록 문제:데이터베이스 에 필드 를 만 들 고 파일 이름 을 기록 합 니 다.파일 을 만 들 때마다 자동 으로 생 성 된 파일 이름 을 데이터베이스 에 저장 합 니 다.추천 글 은 정적 파일 을 저장 하 는 지정 한 폴 더 의 이 페이지 를 가리 키 면 됩 니 다.PHP 동작 으로 글 목록 을 처리 하고 문자열 로 저장 하 며 페이지 를 만 들 때 이 문자열 을 바 꾸 면 됩 니 다.예 를 들 어,페이지 에 글 목록 을 놓 은 표 에 태그{articletable}를 추가 하고,PHP 처리 파일 에 서 는:  Code:      $title="타 오 마 이 국제 테스트 템 플 릿";  $file   = "TwoMax Inter test templet,author:Matrix@Two_Max"; $fp          = fopen ("temp.html","r");  $content  = fread ($fp,filesize ("temp.html"));  $content .= str_replace ("{ file }",$file,$content);  $content .= str_replace ("{ title }",$title,$content);  //  목록 생 성 시작  $list = '';  $sql = "select id,title,filename from article";  $query = mysql_query ($sql);  while ($result = mysql_fetch_array ($query)){      $list .= ''.$result['title'].'';  }  $content .= str_replace ("{ articletable }",$list,$content);  //생 성 목록 끝  // echo $content;  $filename = "test/test.html";  $handle    = fopen ($filename,"w"); //파일 포인터 열기,파일 만 들 기  /*파일 이 생 성 되 고 쓸 수 있 는 지 확인 합 니 다.  */  if (!is_writable ($filename)){      die("파일:".$filename."쓸 수 없습니다.속성 을 확인 하고 다시 시도 하 십시오!");  }  if (!fwrite ($handle,$content)){  //파일 에 정보 쓰기     die("파일 생 성".$filename."실패!");  }   fclose ($handle); //닫 기 포인터  die("파일 생 성".$filename."성공!");?> 질문만약 우리 가 페이지 를 지정 할 때,페이지 당 20 편 이다.한 서브 채널 목록 에 있 는 글 은 데이터 베 이 스 를 통 해 45 개 로 조회 된다.그러면 먼저 우 리 는 조 회 를 통 해 다음 과 같은 매개 변 수 를 얻 을 수 있다.1.총 페이지 수.2.페이지 당 편수.두 번 째 단계,for($i=0;$i < allpages; $i++),페이지 요소 획득,분석,글 생 성 은 모두 이 순환 에서 실 행 됩 니 다.다른 것 은 die("파일 만 들 기".$filename."성공!";이 문 구 는 프로그램 실행 을 중단 하기 때문에 순환 후의 디 스 플레이 에 놓 습 니 다.예:  Code:     $fp          = fopen ("temp.html","r");  $content  = fread ($fp,filesize ("temp.html"));  $onepage  = '20';  $sql          = "select id from article where channel='$channelid'";  $query      = mysql_query ($sql);  $num        = mysql_num_rows ($query);  $allpages   = ceil ($num / $onepage);  for ($i = 0;$i<$allpages; $i++){      if ($i == 0){         $indexpath = "index.html";      } else {         $indexpath = "index_".$i."html";      }     $start = $i * $onepage;     $list    = '';     $sql_for_page = "select name,filename,title from article where channel='$channelid' limit $start,$onepage";     $query_for_page = mysql_query ($sql_for_page);     while ($result = $query_for_page){         $list .= ''.$title.'';      }     $content = str_replace ("{ articletable }",$list,$content);     if (is_file ($indexpath)){         @unlink ($indexpath); //파일 이 존재 하면 삭제      }     $handle    = fopen ($indexpath,"w"); //파일 포인터 열기,파일 만 들 기     /*    파일 이 생 성 되 고 쓸 수 있 는 지 확인 합 니 다.     */     if (!is_writable ($indexpath)){         echo"파일:".$indexpath."쓸 수 없습니다.속성 을 확인 하고 다시 시도 하 십시오!";/echo 로 변경      }     if (!fwrite ($handle,$content)){  //파일 에 정보 쓰기        echo"파일 생 성".$indexpath."실패!";/echo 로 변경      }      fclose ($handle); //닫 기 포인터  }  fclose ($fp);  die("페이지 파일 생 성 완료,불완전 생 성 시 파일 권한 시스템 을 검사 한 후 다시 생 성 하 십시오!");?>   대체적인 사고방식 은 이와 같다.예 를 들 어 다른 데이터 생 성,데이터 입 출력 검사,페이지 내용 지향 등 은 페이지 에 참작 할 수 있다.실제 글 시스템 처리 과정 에서 고려 해 야 할 문제 가 많 고 동적 페이지 와 다른 점 이 있 으 며 주의해 야 할 부분 이 많다.그러나 대체적인 사고방식 은 이렇다.다른 방면 에 서 는 하 나 를 보면 열 을 안다.

좋은 웹페이지 즐겨찾기