PHP 단일 모드 데이터베이스 연결 클래스 와 페이지 정적 화 실현 방법

본 고의 실례 는 PHP 단일 모드 데이터베이스 연결 클래스 와 페이지 정적 화 실현 방법 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
데이터베이스 test 에서 데이터 시트 account 내용

단일 모드 의 데이터베이스 연결 클래스
db.php

<?php
//          
class DB {
  //           
  static public $_instance;
  //         
  static public $_connectSource;
  //       ,        PDO,     PDO
  private $_dbConfig = array(
    'host' => 'localhost',
    'user' = > 'root',
    'password' => '',
    'database' => 'test'
  );
  //       
  private function __construct() {
  }
  //   
  public static function getInstance() {
    if(self::$_instance instanceof self) {
      return self::$_instance;
    }
    self::$_instance = new self();
    return self::$_instance;
  }
  //     
  public function connect() {
    //               
    if(!self::$_connectSource) {
      try {
        $dsn = 'mysql:host='.$this->_dbConfig['host'].';dbname='.$this->_dbConfig['database'];
        $username = $this->_dbConfig['user'];
        $password = $this->_dbConfig['password'];
        self::$_connectSource = new PDO($dsn, $username, $password);
      }catch(PDOException $e) {
        echo $e->getMessage();
      }
    }
    return self::$_connectSource;
  }
}
?>

PHP 가 페이지 정적 화 를 실현 하 는 예
사실 원 리 는 간단 합 니 다.여기 서 몇 가지 함 수 를 사 용 했 습 니 다.ob_start(),ob_get_contents(),file_put_contents()는 버퍼 를 열 었 다 는 뜻 입 니 다.ob_start()는 버퍼 내용 을 얻 었 다 는 뜻 입 니 다.ob_get_contents()내용 을 한 파일 에 넣 었 다 는 뜻 입 니 다.버퍼 의 뜻 을 이해 하지 못 하면 스스로 바 이 두 할 수 있 습 니 다.제 가 이해 하 는 버퍼 는 바로...PHP 에서 데 이 터 를 출력 하려 면 버퍼 를 거 쳐 야 합 니 다.버퍼 에서 이 내용 을 얻 을 수 있 습 니 다.따라서 정적 페이지 를 실현 하 는 방법 은 버퍼 의 내용 을 정적 파일 에 가 져 오고 입구 에서 필요 에 따라 동적 파일 에 접근 하 는 지 정적 파일 에 접근 하 는 지 설정 하 는 것 입 니 다.이런 방법 은 데이터 가 자주 변 하지 않 는 동적 페이지 에 사 용 됩 니 다.다음은 이 기능 을 구체 적 으로 실현 하 겠 습 니 다.
static.php

<?php
//1.                 
//2.               
//3.          
//                          5              ,filemtime()             
if(is_file('./static.shtml') && (time() - filemtime('./static.shtml')) < 300) {
  //     ,          
  require_once('./static.shtml');
}else {
//           ,                        5  ,              ,    static.shtml     
  //     
  header('Content-Type:text/html;charset=utf-8');
  require_once('./db.php');
  $connect = DB::getInstance()->connect();
  //      
  $sql = 'select * from account';
  $res = $connect->query($sql);
  //     
  ob_start();
  //ob_get_clean()                 ,        ob_get_clean() ob_get_contents() 
  require_once('./static_show.php');
  //              
  file_put_contents('./static.shtml', ob_get_contents());
}
?>

동적 디 스 플레이 템 플 릿 파일 staticshow.php

<?php
  foreach($res as $row) {
    echo '  :'.$row['name'].'<br/>';
    echo '  :'.$row['money'].'<br/>';
    echo '<hr/>';
  }
?>

static.php 를 방문 할 때 static.shtml 이 없 기 때문에 else 작업 을 먼저 수행 하여 static 에 보 여 줍 니 다.show.php 및 static.shtml 파일 생 성

만약 에 이때 제 가 데이터 베 이 스 를 수정 하면 zjp 의 money 를 800 으로 바 꾼 다음 에 static.php 를 방문 하면 어떤 내용 을 보 여 드릴 까요?맞습니다.zjp 의 지갑 은 600 입 니까?왜 일 까요?if 의 내용 을 실 행 했 기 때문에 static.shtml 을 직접 보 여 주 었 습 니 다.우 리 는 static.shtml 이 어떤 것 인지 볼 수 있 습 니 다.

5 분 후에 staitc.phop 을 방문 하면 무엇 을 표시 할 까요?맞습니다!zjp 의 지갑 은 800 이 되 고 static.shtml 의 내용 은 zjp 의 지갑 은 800 으로 업 데 이 트 됩 니 다.
테스트 obget_clean()과 obget_contents()
테스트 방법 은 매우 간단 하 다.

<?php
$test = 'Hello World!';
//     
ob_start();
//  ob_get_contents()
echo $test;
echo ob_get_contents();
//    :Hello World!Hello World!
//  ob_get_clean()
echo $test;
echo ob_get_clean();
//    :Hello World!
echo $test;
ob_get_clean();
//    :
?>

이렇게 하면 우리 가file_put_contents()를 사 용 했 을 때 출력 문 구 는 어떠한 값 도 출력 하지 않 습 니 다.ob_get_clean()버퍼 의 내용 을 가 져 오고 버퍼 를 비 울 수 있 기 때 문 입 니 다.그래서 우리ob_get_clean()때 test 를 받 지 못 했 을 때 test 의 값 을 받 지 못 했 고echo test때 값 을 얻 을 수 있 었 다.우리 가echo ob_get_clean()을 사 용 했 을 때 버퍼 의 내용 은 비어 있 지 않 았 다.
실제로ob_get_contents()함 수 는 실 행 된 셈 이다.ob_get_clean()ob_get_contents().
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기