>  기사  >  백엔드 개발  >  PHP 페이지 정적화의 순수 정적 및 의사 정적 사용에 대한 자세한 설명

PHP 페이지 정적화의 순수 정적 및 의사 정적 사용에 대한 자세한 설명

coldplay.xixi
coldplay.xixi앞으로
2020-07-14 17:16:273431검색

PHP 페이지 정적화의 순수 정적 및 의사 정적 사용에 대한 자세한 설명

이 문서의 예에서는 PHP 페이지 정적화의 순수 정적 및 의사 정적 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

페이지를 정적으로 만들어야 하는 이유는 무엇인가요?

               사용자가 자주 업데이트되지 않는 웹 페이지 에 액세스하면 PHP는 PHP 스크립트 파일을 구문 분석하고 데이터베이스에서 페이지에 필요한 데이터를 쿼리한 다음 페이지 템플릿을 렌더링하고 마지막으로 완제품 페이지가 사용자에게 표시됩니다. 단일 요청은 서버가 처리하기에 매우 간단하고 빠릅니다. 그러나 수천 명의 다른 사용자가 동시에 페이지를 요청하면 어떻게 될까요? 이는 의심할 여지 없이 자원 낭비이며, 이것이 정적인 작업을 수행하는 목적입니다.

  정적화는 순수 정적과 의사 정적으로 나뉘며, 순수 정적은 부분 ​​순수 정적과 전체 순수 정적으로 구분됩니다.

관련 학습 권장 사항: 초급부터 숙련까지의 PHP 프로그래밍

Pseudo-static

이름에서 알 수 있듯이 pseudo-static은 실제 정적 페이지가 아니라 가짜 페이지입니다. 예를 들어 백엔드 언어로 PHP를 사용하는 웹사이트의 경우 일반적인 상황에서는 해당 URL이 의사 정적 처리를 수행한 후 http://www.example.com/index.php와 유사해야 합니다. 방문 동일한 페이지에 표시되는 URL은 http://www.example.com/index.html일 수 있습니다. 그 기능은 라우팅을 단순화하고 검색 엔진에서 더 나은 색인을 생성하는 것입니다. 이 방법은 사용자가 백엔드 언어를 알지 못하게 하려는 경우에도 사용할 수 있습니다. 라우팅 및 리디렉션 지식은 여기에서 설계되었으며 자세히 설명하지 않습니다.

순수한 정적

  • 부분적으로 순수한 정적

페이지는 일반적으로 텍스트, 카테고리, 친숙한 링크, 열 등으로 구성될 수 있는 블로그와 같은 여러 부분으로 구성됩니다. 일부 부분은 자주 업데이트되고 일부 부분은 드물게 업데이트되는 경우 부분 정적화를 사용할 수 있습니다.

  • 모두 순수 정적입니다

이전 내용을 읽어보면 이해하기 쉽습니다. 페이지의 모든 내용이 자주 업데이트되지 않을 때 사용하는 방법입니다.实 정적 페이지 구현의 원리

가장 먼저 말해야 할 것은 버퍼라는 것입니다. 그 역할을 설명하기 위해 간단한 예를 들어 보겠습니다. 문서를 편집할 때 시스템은 문서를 저장하기 전에 디스크에 쓰지 않지만 버퍼가 가득 차거나 저장 작업이 수행되면 버퍼에 씁니다. 데이터가 디스크에 기록됩니다. PHP의 경우 echo와 같은 모든 출력 작업도 먼저 PHP 버퍼에 기록됩니다. 스크립트가 실행되거나 강제 출력 캐싱 작업이 수행될 때까지 데이터는 브라우저에 표시되지 않습니다.

       여기서 우리는 이 버퍼에 대해 뭔가를 할 것입니다. PHP가 콘텐츠를 출력하기 전에 버퍼의 콘텐츠(여기에 렌더링된 템플릿 콘텐츠가 있습니다)를 가져온 다음 이를 정적 파일에 쓰고 다음 만료 시간을 설정합니다. 사용자가 페이지를 방문할 때 정적 파일이 존재하고 유효 기간 내에 있으면 정적 파일을 사용자에게 직접 표시하고, 그렇지 않으면 정적 파일을 다시 작성합니다.


코드 구현

싱글톤 모드를 사용한 데이터베이스 연결.

Database.php

<?php
class Database {
  //用于保存实例化对象
  private static $instance;
  //用于保存数据库句柄
  private $db = null;

  //禁止直接实例化,负责数据库连接,将数据库连接句柄保存至私有变量$db
  private function __construct($options) {
    $this->db = mysqli_connect($options[&#39;db_host&#39;], $options[&#39;db_user&#39;], $options[&#39;db_password&#39;], $options[&#39;db_database&#39;]);
  }

  //负责实例化数据库类,返回实例化后的对象
  public static function getInstance($options) {
    if (!(self::$instance instanceof self)) {
      self::$instance = new self($options);
    }
    return self::$instance;
  }

  //获取数据库连接句柄
  public function db() {
    return $this->db;
  }

  //禁止克隆
  private function __clone() {
    // TODO: Implement __clone() method.
  }

  //禁止重构
  private function __wakeup() {
    // TODO: Implement __wakeup() method.
  }
}

정적 페이지의 경우Database.php

<?php
class Cache {
  public function index($options) {
    //判断文件是否存在,判断是否过期
    if (is_file(&#39;shtml/index.shtml&#39;) && (time() - filemtime(&#39;shtml/index.shtml&#39;) < 300)) {
      require_once (&#39;index.shtml&#39;);
    }else {
      require_once (&#39;Database.php&#39;);
      $con = Database::getInstance($options)->db();
      $sql = "SELECT * FROM pro_test";
      $exe_res = mysqli_query($con, $sql);
      $res = mysqli_fetch_all($exe_res);
      try{
        if (!$res) {
          throw new Exception("no result");
        }
      }catch (Exception $e) {
        echo &#39;Message: &#39; .$e->getMessage();
      }
      //开启缓存区,这后面的内容都会进缓存区
      ob_start();
      //引入模板文件(模板会渲染数据)
      require_once (&#39;templates/index.php&#39;);
      //取出缓存区内容(在这里是渲染后的模板),将其保存(默认会覆盖原来的)为index.shtml(static html)
      file_put_contents(&#39;shtml/index.shtml&#39;, ob_get_contents());
    }
  }
}
//数据库配置信息
$options = [
  &#39;db_host&#39; => &#39;mysql&#39;,
  &#39;db_user&#39; => &#39;root&#39;,
  &#39;db_password&#39; => &#39;localhost&#39;,
  &#39;db_database&#39; => &#39;pro_shop&#39;,
];
$obj = new Cache();
$obj->index($options);

用于静态化页面

Cache.php

<!DOCTYPE>
<html>
<head>
  <meta charset="UTF-8">
  <title>首页</title>
</head>
<body>
<?php foreach ($res as $item) {?>
<p>姓名:<?php echo $item[1]?></p>
<p>密码:<?php echo $item[2]?></p>
<?php }?>
</body>
</html>

template/index.php

rrreee

浏览器访问 localhost/Cache.php

Cache.php

rrreeetemplate/index.php

rrreee

브라우저 액세스 localhost/Cache.php

🎜🎜🎜🎜🎜

위 내용은 PHP 페이지 정적화의 순수 정적 및 의사 정적 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제