后端开发|php教程
PHP,页面静态化,纯静态,伪静态
后端开发-php教程
asp多用户商城源码,ubuntu添加 权限设置,linux网络爬虫思路,headdoc php,舒梦seolzw
为什么要静态化页面?
企业网站带源码下载,vscode分屏后合并,ubuntu 360极速,tomcat应用日志分离,sqlite 两个字段串,下雨天在墙上爬虫子怎么办,php文件 xampp,seo推广专员是什么,公交查询网站源码,webapp模板lzw
当用户访问一个不经常更新的Web页面,PHP接到指示对php脚本文件进行解析,从数据库查询到该页面所需要的数据,然后对页面模板进行渲染,最后将一个成品页面展示给用户。单次请求对于服务器来说非常简单,处理起来非常快,但是如果同时有成千上万各用户请求该页面呢?这无疑是对资源的一种浪费,这就是我们要做静态的目的。
搜索前端源码,vscode新建页面怎么建,ubuntu桌面 kvm,工程不能加进tomcat,家养小型爬虫,php英文网站源码,断链seo有什么作用,卖本子源码的网站,淘宝清爽模板lzw
静态化分为纯静态与伪静态,纯静态又分为局部纯静态和全部纯静态。
伪静态
伪静态顾名思义,它并不是真的静态页面而是伪装的。例如一个以php作为后端语言的web站点,正常情况下他的url应当是类似于/index.php,当我们做了伪静态处理后,当你访问同一个页面它展示的url可能就是/index.html了。它的作用是路由简化,能够更好的被搜索引擎收录,当你不想让用户知道你的后端语言时也可以采用这种方法。这里设计到了路由与重定向知识,不做详解。
纯静态局部纯静态
一个页面通常由多个部分组成,例如一个博客,他可能由正文、分类、友情链接、栏目等部分组成。当有些部分更新频繁,而有些部分不常更新时就可以采用局部静态化。
全部纯静态
看了前面的内容这个就很容易理解了,当一个页面所有内容都不常更新即采用这种方式。
静态化页面实现原理
首先要说的是一个叫做缓冲器(buffer)的东西。举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘。对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上显示。
这里我们就要对这个缓冲区做一下文章了,在php输出内容之前,我们取出缓冲区的内容(这里就是渲染好的模板内容了),然后将其写入一个静态文件中并设置过期时间,当下次用户访问该页面的时候,如果该静态文件存在并且在有效期内,我们就直接将该静态文件展示给用户看,否则重写静态文件。
代码实现
数据库连接,用到了单例模式。
Database.php
db = mysqli_connect($options[db_host], $options[db_user], $options[db_password], $options[db_database]); } //负责实例化数据库类,返回实例化后的对象 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
<?phpclass Cache { public function index($options) { //判断文件是否存在,判断是否过期 if (is_file(shtml/index.shtml) && (time() - filemtime(shtml/index.shtml) 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 Message: .$e->getMessage();}//开启缓存区,这后面的内容都会进缓存区ob_start();//引入模板文件(模板会渲染数据)require_once ( emplates/index.php);//取出缓存区内容(在这里是渲染后的模板),将其保存(默认会覆盖原来的)为index.shtml(static html)file_put_contents(shtml/index.shtml, ob_get_contents()); } }}//数据库配置信息$options = [ db_host => mysql, db_user => oot, db_password => localhost, db_database => pro_shop,];$obj = new Cache();$obj->index($options);
template/index.php
姓名:
密码:
浏览器访问localhost/Cache.php