ホームページ  >  記事  >  バックエンド開発  >  PHP ページの静的化の純粋な静的および疑似静的な使用方法の詳細な説明

PHP ページの静的化の純粋な静的および疑似静的な使用方法の詳細な説明

coldplay.xixi
coldplay.xixi転載
2020-07-14 17:16:273439ブラウズ

PHP ページの静的化の純粋な静的および疑似静的な使用方法の詳細な説明

この記事の例では、PHP ページの静的化の純粋な静的使用法と擬似静的使用法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです:

なぜページを静的にする必要があるのですか?

ユーザーが あまり更新されない Web ページにアクセスすると、PHP は php スクリプト ファイルを解析し、ページに必要なデータをデータベースからクエリするように指示されます。次に、ページ テンプレートをレンダリングし、最後に完成したページをユーザーに表示します。単一のリクエストはサーバーにとって非常に簡単で高速に処理されますが、何千もの異なるユーザーが同時にそのページをリクエストした場合はどうなるでしょうか?これは間違いなくリソースの無駄であり、これが静的を行う目的です。

静的化は純粋静的と擬似静的に分けられ、純粋静的は部分的純粋静的と全体的純粋静的に分けられます。

関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで

pseudo-static

名前のとおり、疑似静的示唆していますが、真実ではありません 静的ページは偽装されています。たとえば、バックエンド言語として PHP を使用する Web サイトの場合、通常の状況では、その 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.
  }
}
静的ページに使用されます

Cache.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);
template/index.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>
ブラウザ アクセスlocalhost/Cache.php

以上がPHP ページの静的化の純粋な静的および疑似静的な使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。