PHP实现页面静态化

  [复制链接]

2131

主题

2149

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
40353
admin 发表于 2021-5-30 12:32:48
25842 101

) e  E* j5 q" k; V课程目录
$ X# J# K1 K9 l8 ~/ x; X/ a$ ~! G8 ]$ b/ E# `: C6 f  A
  PHP实现页面静态化1 K/ w1 k9 l& ?' l( ]4 L; F
为什么要页面静态化?
3 {6 {. Z1 H/ r. b. K6 \
' [1 F+ k" F  T1.动态文件执行过程:语法分析-编译-运行
5 U# i6 |2 B4 \# ]' k) K. y$ t$ S+ h+ _
2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法。(纯静态,伪静态还是需要PHP解释器的)
( Y. k, a5 I3 V9 [; p& c3 U& _1 b0 ?9 D, j: y/ J7 P/ L5 O
3、生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名- {% D3 X; l- [) f) K: e
: O5 X& D5 r" V, u2 M

& T) H. u' {) \8 a; i7 x; ^优化页面响应时间方法/ g& J3 J2 m1 V1 C5 i# o

. Y( ?. @8 C& O' ?) |1 H/ ?$ Y; A1.动态页面静态化
* `7 P5 W- n. d6 W: n7 f2 ]4 W& J2 E- l* v( W
2.优化数据库 ' V/ ?) J- @- Q) {" j6 s5 V* ~
9 O9 L2 R1 M3 u/ O( O2 L
3.负载均衡
5 H# M+ y* y! G  a7 f, j5 C/ y
1 k: |3 U$ w2 A& `  ~4 E0 M4.使用缓存等等
' m6 g2 p; }6 Y3 X$ Z' x
( @$ L5 Z8 u0 o* B) u//动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静态化,可用伪静态(例如微博等)
+ D/ ^7 I# ^) I" D7 E+ T# X2 q& J! |$ j- t, q9 b/ X5 n5 J
. B( k2 `' B4 r: g4 ~
静态化详细介绍: ~& U' E3 L4 E/ h/ o7 l, K

9 @9 C/ G. x" D, F3 |) {/ U$ W; H) J$ M1、纯静态分为局部静态化(局部动态化,使用AJAX动态获取数据)和纯静态化。
6 F8 r# p8 S! N- F9 S5 a) Y' d" S& n
伪静态:改变URL(需要服务器支持,如:apache等等) 8 _' @9 u  B- y
8 j8 v& i) W1 d: {% y0 y# D" l1 p
2、从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是html htm 或者是目录格式 & U/ Q; D* q0 H6 R! B

. h3 h9 u7 t. p5 M7 \7 b$ m7 T伪静态只是改变了URL的表现形式,实际上还是动态页面 ! x  _4 v  b! z* }
3 o/ U7 S9 M* \
静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗的
# P2 e2 G) T; U6 q; L
$ j  U) \+ P) L2 Q总结,在SEO方面,伪静态和静态页面的功能是相同的,但是伪静态本质上还是动态页面,所以消耗资源是和动态页面一样的,而且因为Rewrite服务器还需要消耗额外的资源。
  _5 @8 a0 V- \% B! @; f
* ]) j# @- L7 @1 S" h
' _7 P# |. t+ w- P" DBuffer缓冲区认知
3 Z4 k  B: V$ i0 m: R6 F% y4 S! \9 @0 M+ {0 D) K, z0 ?$ X# M; o3 p
这里写图片描述' q2 A  U, `, u' e4 a
  b; q6 X* A5 T  R
2 q3 ?1 [9 U9 x3 |9 r- n
1、开启buffer
2 A/ [3 a% N1 [' o3 S4 I# c0 f; J3 P2 A+ w

0 R: p3 t- c0 `. H8 T7 `% [# g6 N' S$ ^) R
在php.ini中的output_buffering开启6 I) g1 S& Q6 @
2 ^9 h9 C5 ^4 Y+ K+ l
在php文件中使用ob_start()函数开启
& R6 ~% N# j4 Q' L, M$ b" e  k
3 t9 r: i' \* ^  v7 S
5 F3 s3 _3 G, y- n* m! n& r5 p3 E; Default Value: Off
5 P! [. k/ E+ U9 `! y+ B' w! u; Development Value: 4096
5 F* d$ U% v# M8 _; Production Value: 4096
6 y, l* `) J+ t% h# u+ q0 F& E6 f; http://php.net/output-buffering
- C  m5 J( U/ e+ w; L% Eoutput_buffering = 4096
# a% H. F! ^" P" w) w% g: d: X2 y$ u: c' y( ~4 k$ Y+ {

  s* k1 i9 j9 f( j$ c8 l. P. h/ R  R6 K1 y
2、获取缓冲区的内容 ! J" g6 e/ y3 u3 E+ B5 e

3 u3 v: j: R) u8 e' r  _/ Qoutput_buffering=on 需要先开起,才能调用ob_get_contents()函数。但是,如果不开启output_buffering时,当在头文件中调用函数ob_start()函数时,ob_get_contents()也能使用。/ Q9 o) [/ U8 Y9 \; `% f
9 L+ q* m4 w* f* K; b7 e" B

' Q: ]. Q- o+ x7 zob_get_content();//返回输出缓冲区的内容;
) S% e. {+ b9 w9 q4 p9 Q8 }9 F/ D$ _9 k/ Z9 d) Q
PHP如何实现页面纯静态化
# x+ E) ?7 t& i, X8 f, T
9 D) ^$ i6 ?. d3 U# ?基本方式 9 C5 t" g# A2 w4 A4 f* o

1 N) J* {9 V! R9 c" v, a- y1、file_put_contents
, ~$ i: O( }) r# t
; _6 d2 _$ b: r/ ?5 b2、使用PHP内置缓存机制实现页面静态化output_buffering
! j' P$ s; h- f
' s  {4 C* k/ c' E2 }3 r: O
! O; ~/ s' _: K9 w  m
5 t$ {; b2 M* R+ ~6 W( v1 _" f& uob_start()//如果php.ini已经开启,那么这里会开启一个新的输出缓冲区;* [; t8 Q) ]5 R9 C
ob_get_contents()//获取输出缓冲区内容;
: o$ L0 v6 m; U! Q9 M$ n# `ob_clean()//清空输出缓冲区内容,但是不会删除输出缓冲区$ W" D7 R5 E4 u
ob_get_clean//获取输出缓冲区内容并且删除输出缓冲区,等价于ob_get_contents和ob_end_clean
4 \; i$ [! i! K- \' j% I( B# h
0 _) a3 C) \6 r3 \6 C) L9 x下方这段代码,运行是不会有输出的 ; b5 [1 ?! u1 c9 ~" E0 z

" ]# g3 N: j5 l: z  `2 M' _4 ^原因就是输出缓冲区被清空了,看上图理解6 ]+ L& H4 d- Y0 A+ T4 k! ]1 H- B3 ]; g
5 o, }, e' s* }0 @" {2 ]

5 R' j3 M! n% Xob_start();
) t: S. i3 h& l/ `9 ~& ~) Jecho 777;
4 J9 B0 W$ `/ Uecho 000;
/ ^9 V& K. g+ e7 ~ob_clean();8 O" O, C! U) ^4 P- S! U4 h: p; n
echo ob_get_contents();
, z) p1 ?) N  X& C: r$ _1 w: T) R% k
纯静态实现,代码和实现逻辑参考:3 k4 }9 f  t3 \7 D; O1 ]% j8 n: G' S( S3 O

2 P* k5 v" j' Y% ^. n3 f8 r7 a
0 u) h1 e6 `7 ?. a$ V. C% q% Z! {9 B5 v/ R2 A! @
/**  G" r/ p3 C) b+ B& o8 h
* 触发系统生成纯静态化页面业务逻辑, p: x. w5 l1 [$ `4 H9 r) t' T1 r
* 有3种方案: 2 e. k( h& C6 h: K
* 第一:定时扫描程序(利用crontab来处理)  % h" V+ p/ F' w! }' N* w7 g- }
* 第二:手动触发方式,人为触发: e& o( W- ]2 m. ]+ P2 d4 E
* 第三:页面添加缓存时间,在页面中控制时间来操作2 ^' c. D8 y& `' C3 Y+ Q8 [
*/
& R& H, p( o" G" r//===========================================( ?, H  j0 Q2 m$ C
//生成纯静态文件步骤
7 E) x6 o$ y  c8 w//1、连接数据库,然后从数据库里面获取数据5 b8 d7 P  U; l3 c
//2、把获取到的数据填充到模版文件里面
, r0 b3 A  ~' d9 w2 A: t//3、需要把动态的页面转为静态页面,生成静态化文件
: e) t  q: C; k. l8 q6 [6 a4 \& q//============================================
6 U. K6 o: i; ?; O/ h: Q//PHP实现页面静态化有以下步骤:* Z* N& @6 M: ?6 G( I6 `* ~  [
//1:A.php请求数据库数据:通过mysql或者mysqli或者PDO扩展5 V) y, X2 z  C
//2:在A.html中输出A.php请求的数据库数据:一般是将将在数据库中取出的数组形式的数据赋予新的数组,并且输出. k* h2 x3 L# ]) K$ P
//3:在A.php中包含A.html文件:直接通过require_once()函数或者inclde_once()1 G+ m- n! Z7 L8 D
//4:开启数据缓存ob_start()=>获取获取缓存内容并且将数据生成在静态文件中file_put_contents('index.shtml',ob_get_clean());# t5 o5 J. g, t  w4 P, O+ s; f8 W
//header("content-type:text/htm;charset=utf-8");
) Z% x/ g4 X7 x  kif(is_file('./index.html') && (time() - filemtime('./index.html') < 1200))
7 }* v# [4 v! z; c: M{
2 O/ z, Y3 j! n8 [! v9 x    //缓存未失效则直接加载静态文件6 Y  ]3 O3 B6 _4 _
    require_once('./index.html');
, \1 M5 p2 c0 Q# A, c( z}
" f7 a0 I4 f, D- P4 v3 |else ; T" ^4 y' r+ \: I9 F
{
% U' O2 R# N1 u3 H2 i+ [    //缓存失效了则重新生成
" k: ~0 J0 M6 E    // 引入数据库链接操作0 ?: ?) F0 B! }, T' m( c: W
    require_once('./db.php');
5 V; m  s: w/ _+ w1 x# v% f( M% n    $sql = "select * from news where `category_id` = 1 and `status` = 1 limit 4";
& ~2 Z$ u/ A. e* F. t1 d/ B    try
5 c. b( g2 u* D9 W; ~    {: B( V, z3 y& G* W0 y
            $db = Db::getInstance()->connect();2 `: O% b# N( z$ L
            $result = mysql_query($sql, $db);
/ F% m8 F1 z3 ^$ B            $newsList = array();
8 A4 l: W, c4 N  _            while($row = mysql_fetch_assoc($result))
$ A, v9 x+ r. j) d2 R            {1 a+ V5 X4 ?& N9 k* F$ T: X' R
                    $newsList[] = $row;
. o. W' X' Q) l, r! @$ C            }' ^6 l* e/ {. x  R- B+ M
    }; l, H4 _9 u4 e. [) L
    catch(Exception $e)" e6 J: W( L- [9 A5 W6 z; h
    {
+ h3 N4 o- e/ g& [, k( j$ q  v5 w            // TODO
% X& g' u6 k+ H+ r2 V% H    }) Z. ?2 w4 s1 ~& _
    ob_start();
" q# r( K: a0 Y: Y1 M    require_once('template/index.php');//引入模版文件
+ p$ C- F+ |+ i    file_put_contents('./index.html', ob_get_contents());//生成静态文件
8 A6 c0 _+ s* Z$ m6 Z    //ob_clean();
9 v$ G2 s& A% {7 y& N2 c9 O}
: n0 [; z$ i* W; C# p8 o
1 k: e# }6 r% V# u9 m8 B7 @! C) x伪静态是影响服务器忄生能的,不是越多越好,需要按需求而定
7 ?( N7 q, ], g8 C( @" O/ j8 |/ ?9 r& M/ Z3 q& f
资源存放>百度网盘% [  C: t8 H0 X
7 m& ]; C" G, F, v8 q. m. z  _+ r; Y
下载地址) \  G5 _, j9 r5 L) D. ~
游客,如果您要查看本帖隐藏内容请回复

& y) w  G+ |, W9 t$ fVIP会员全站免金币' F" m, J1 A) E! L! m6 j& Z
IT直通车已为全国各地程序员提供上千G课程资源
+ r$ Q8 |' Z. R4 p* Y! _如您需要购买本站VIP会员,请点击「开通VIP」享受全站资源免金币无限制下载!
1 M* s4 D2 }% }2 E2 \1 p) f3 P, l
7 O6 m2 v' p& z" {! c' ?* H2 j失效反馈8 L( m: W: P8 _6 X( |) i
IT直通车所有资源都存放在自己注册的百度网盘,失效可修复,确保持续可用
, t6 F% j) f) t# j; J如您需要的资源链接提示失效,请尽情反馈给我们,将在收到反馈后尽快修复「点击反馈
6 F+ A1 t6 v: u( u+ x. C, {8 K+ h* r0 d" {+ E4 i: j
获得帮助$ t6 z3 N' }7 n  H/ q4 V
需要帮助吗?点击网站右侧在线客服,7X12小时在线!- V% a# J, d# X; R9 Q2 t$ [

. }1 o: X6 b8 Q$ S6 X9 ]
回复

使用道具 举报

第一个甲马俳 发表于 2021-5-30 12:35:29
讲的很详细,对于新手的我有帮助
回复

使用道具 举报

123457557 发表于 2021-6-3 11:47:56
谢谢分享~
回复

使用道具 举报

lc泠辰 发表于 2021-6-3 22:03:15
收割一波好资源
回复

使用道具 举报

悦悦782 发表于 2021-6-3 22:03:15
6666666666666
回复

使用道具 举报

翻滚的小馒头 发表于 2021-6-4 12:21:58
<<HP实现页面静态化>>[复制链接]
回复

使用道具 举报

蠕行者 发表于 2021-6-4 15:05:04
终于找到了,哈哈
回复

使用道具 举报

一起学呀 发表于 2021-6-4 16:50:25
<<HP实现页面静态化>>[复制链接]
回复

使用道具 举报

孙悟空748 发表于 2021-6-10 18:07:38 来自手机
好东西拿走了
回复

使用道具 举报

里干整团 发表于 2021-6-13 10:40:31
谢谢分享~
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 AD:IT直通车VIP会员全站免金币下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

遇到问题联系客服

售后保障

如您充值或开通会员后资源无法下载

本站有售后服务,联系客服修复即可

[联系客服]-[会员充值]

更多课程

由于QQ吞消息严重,网站启用邮件对接VIP会员服务,有事请发邮件到 wangkefuwu@outlook.com

关于本站

VIP介绍 加入我们

售后服务

QQ客服 Email邮件

网站声明

IT直通车(www.itztc.com)是一个IT视频教程、软件、书籍资源整合分享平台
站内所有资源均来自于互联网,版权归属原资源作者,如无意侵犯您的版权,请联系我们删除处理。

Archiver|手机版|小黑屋|IT学习网 |网站地图

Powered by Discuz! X3.4  © 2001-2013 IT直通车 ICP证:粤ICP备13026616号 增值电信业务经营许可证:粤B2-20140196

返回顶部 返回列表