PHP实现页面静态化

  [复制链接]

2113

主题

2127

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
37354
admin 发表于 2021-5-30 12:32:48
25341 100

3 p: x- _# x4 U+ P: g* S4 ?2 h课程目录
) V( [( O+ _% \, X+ W) W
4 N" l# Y9 o+ J7 }/ [  PHP实现页面静态化, Z% ~* |0 S; k$ r! s& `7 n3 m4 T
为什么要页面静态化?
1 k* N% Z  E0 Z1 w
  B6 q8 {3 d$ n, o1.动态文件执行过程:语法分析-编译-运行 6 O* Z  q  @( X& z  ]& N/ ^
# H9 d  C+ h  ~; T
2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法。(纯静态,伪静态还是需要PHP解释器的)
5 @3 [: }8 F- D, |; G/ v+ t" S8 U& Y/ b9 ^& F
3、生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名
: t; y: j9 S0 E! u, X5 i* T! _$ U- X# z1 M$ l& K

0 T. s4 G7 T% w$ x优化页面响应时间方法
* ~2 x+ t* I6 u5 w1 T  s5 i% _" K9 {+ w
+ T5 o! d- G, J1 w1.动态页面静态化 ( S8 N& x4 z; A3 e: y% E" |: O

8 ]" s/ i" c9 p* ~2 ]2.优化数据库
6 f/ |" |. E1 n, f" }; c$ c0 d" B2 [' u, d! z, E5 n' ^
3.负载均衡
2 Y, }$ P9 u3 Z+ Y4 H0 A" L* \+ i1 J2 O; B' V; A! S
4.使用缓存等等
0 y8 q9 Q0 p3 s4 ]3 L1 p+ c
3 c% `4 ]" ~% q2 O" B//动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静态化,可用伪静态(例如微博等)6 Y  A5 Y( y( o% I/ @/ M0 N$ \
; f* ?* N4 P: ?' y5 b

8 o9 Z0 B/ l9 C3 V# [静态化详细介绍# r5 m- p3 w- D- b, z& {* @
- z) a( Q& j, O! D/ e
1、纯静态分为局部静态化(局部动态化,使用AJAX动态获取数据)和纯静态化。
4 ]; {9 j/ f9 Z( }% g* F8 U! K, B1 n9 `
伪静态:改变URL(需要服务器支持,如:apache等等) & E# D( o# z6 j. s7 }* R
8 W1 ?& r5 D$ C/ U! X% \! q
2、从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是html htm 或者是目录格式 ; f  I/ _, i0 ?
& k; |  R# C8 J- \' i6 B; K! b
伪静态只是改变了URL的表现形式,实际上还是动态页面 ) Z/ G9 P# J4 Y9 [8 T

# }. r0 ~1 s0 r* x/ J& |# ?静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗的 3 Q6 ^' O* z/ y+ T7 U
7 D) c$ K  j* e2 \3 P/ Z8 B
总结,在SEO方面,伪静态和静态页面的功能是相同的,但是伪静态本质上还是动态页面,所以消耗资源是和动态页面一样的,而且因为Rewrite服务器还需要消耗额外的资源。9 C& C. o% P( k% T

1 L3 ~& t7 I/ t% v: l! R2 F. T$ b# C9 j3 B
Buffer缓冲区认知
. |% l0 ]: r1 Q' E) }1 W9 K( g+ f- ]9 M; `9 ]; e
这里写图片描述
0 o; g& W  p' e: J8 }- i6 R1 e* F$ k$ ?7 d8 q

2 K+ a5 n0 u* M* j% C1、开启buffer3 I* P+ _7 @! l0 g* A; l
* E; F6 p8 [) x' E$ w

+ k( e5 [, @8 l* n- a& w& Z9 W
! J" f' V0 K9 q7 j7 y8 S1 ~在php.ini中的output_buffering开启
, x; H! z. L. Z/ k+ g. S% m" u- e/ J6 Q! O) y) Y) Y7 z4 l1 N
在php文件中使用ob_start()函数开启- N( S2 V5 y, G

1 E% F# }- o# A/ U# `  O$ N7 [' B1 R9 b1 c: I
; Default Value: Off
2 i* t! P' M& o; Development Value: 4096) X( j$ M" l3 Z( _1 n: F0 M
; Production Value: 4096( g+ R+ s8 l# O3 `$ Y/ ^* P0 Z& S
; http://php.net/output-buffering
4 b* m4 K9 ]% X. R( [output_buffering = 4096
* Y, d4 k. R$ n4 G
8 `/ ]3 o4 D% k3 ?; F4 _
, p% i8 J; B* x+ `' M; |& i, u) a0 n
2、获取缓冲区的内容 & ]0 b! Z* V% ]+ t
( e2 v+ d* R( b; U9 {1 _0 a) S
output_buffering=on 需要先开起,才能调用ob_get_contents()函数。但是,如果不开启output_buffering时,当在头文件中调用函数ob_start()函数时,ob_get_contents()也能使用。$ ?0 F; `/ e" S

' J' C& Z4 l  c/ O+ U! j( \7 \) i. q+ Y" f  c# i
ob_get_content();//返回输出缓冲区的内容;
1 n3 O; D% R3 N: R0 U2 n% x- u( x0 P" ~8 m6 T) D  J- i" u+ c
PHP如何实现页面纯静态化; H! M; J! }" g9 d0 J1 P

0 D# z6 M0 m8 K8 \2 y$ r& p3 o基本方式 ; B. w# c8 w2 q+ O
5 G2 {$ W1 @/ w9 G9 ]
1、file_put_contents
7 c* r' F& V- K2 S! ^* F8 v& v: Q: I5 C4 m' c+ H" [
2、使用PHP内置缓存机制实现页面静态化output_buffering
1 _, z3 L% h5 s, ~4 Y1 W7 m) X8 C/ y, O+ o

: ?. `/ v* |, Q1 R' ^
  r+ {. m$ ?, x, m" G3 hob_start()//如果php.ini已经开启,那么这里会开启一个新的输出缓冲区;
, N9 X; W: _; i; @7 B$ f8 h* j1 kob_get_contents()//获取输出缓冲区内容;7 `. I* Q" T# v, c5 f  O
ob_clean()//清空输出缓冲区内容,但是不会删除输出缓冲区
, I4 V8 T; w: H8 m* r( Qob_get_clean//获取输出缓冲区内容并且删除输出缓冲区,等价于ob_get_contents和ob_end_clean
! Q' r1 d" H5 g8 h$ ?! D
* b" V, ]8 M, u( ~; ~下方这段代码,运行是不会有输出的
0 C( n' G6 U" w' E5 W( j. M  n* Y; u+ `7 K6 I1 s3 K
原因就是输出缓冲区被清空了,看上图理解, s6 I# m  ?! R# ?% _" Z# g8 S
3 h5 Y8 a  b9 a; \6 W7 p
0 P: J( {; I- r5 h! F. A1 Q7 r7 K
ob_start();- p8 G0 c' ~1 c( Z) }, Q
echo 777;8 U+ p# W9 `% k
echo 000;
1 ]* n* S8 n3 C' k/ Eob_clean();
( p2 l, j( O- d0 Wecho ob_get_contents();
- l% y, G  a( g( m) O3 k+ z: {+ ]2 D0 u3 k5 u3 s; Q1 I
纯静态实现,代码和实现逻辑参考:7 I  K: d7 G4 ^' {7 n

; e0 x' F* d( G3 }+ ~  K6 b' m, y
) ~  P9 n5 O0 G/ l1 [/ O6 [$ }
/**
, t  j& k, A3 g * 触发系统生成纯静态化页面业务逻辑
8 O. m. c0 ^5 V * 有3种方案:
" Y. w0 E" x; \" o- N2 w: C( W$ Q0 @ * 第一:定时扫描程序(利用crontab来处理)  
; Q4 C1 e4 e: z7 o/ j3 Q5 ^ * 第二:手动触发方式,人为触发
' b) H& D( w7 h+ J7 g * 第三:页面添加缓存时间,在页面中控制时间来操作' A! F- K+ j$ d
*/
, P1 t5 K5 m  j( b$ n$ Z6 c//===========================================1 L6 N( \: q; h- j- d
//生成纯静态文件步骤
0 H5 Z; s; `: T' m) G//1、连接数据库,然后从数据库里面获取数据
# @  p9 _8 J3 _5 Y- i0 m//2、把获取到的数据填充到模版文件里面
2 d4 a# L$ G* |4 d5 L//3、需要把动态的页面转为静态页面,生成静态化文件
$ y( x: x" R1 N. p//============================================
9 j, U* s' O1 ^: k/ f7 [; r3 u( l//PHP实现页面静态化有以下步骤:
$ b6 w6 [8 |7 P0 X# q; S//1:A.php请求数据库数据:通过mysql或者mysqli或者PDO扩展
" x  ^6 n% o2 a3 q) ~$ l/ W//2:在A.html中输出A.php请求的数据库数据:一般是将将在数据库中取出的数组形式的数据赋予新的数组,并且输出
/ d; e( ?9 z  I# \9 e* v//3:在A.php中包含A.html文件:直接通过require_once()函数或者inclde_once()
  H* D$ E/ ?3 x$ d% K//4:开启数据缓存ob_start()=>获取获取缓存内容并且将数据生成在静态文件中file_put_contents('index.shtml',ob_get_clean());
. ^# l$ R+ c2 V) ]9 r4 ~2 s//header("content-type:text/htm;charset=utf-8");
6 j( M3 v3 C% w1 [  A' Lif(is_file('./index.html') && (time() - filemtime('./index.html') < 1200))3 H- z: s, r. Q7 w9 }" z
{' c  h+ `# N% F3 B# p8 h; E; t
    //缓存未失效则直接加载静态文件. l" A" @; }7 l
    require_once('./index.html');
7 U* j6 p2 b* v: \! C0 k4 H" u3 M}
3 h( a- p( I* G5 kelse   D9 w# V. @  B  V" Q; B; [
{
3 U& u) E1 f! I8 v2 @, C9 Y& f    //缓存失效了则重新生成8 }' d+ l+ Z3 K
    // 引入数据库链接操作) \6 i8 e3 Y+ `6 K) {8 w
    require_once('./db.php');
2 [, S  \9 o; `    $sql = "select * from news where `category_id` = 1 and `status` = 1 limit 4";1 C: X; a- I- r2 z0 U$ A) ^
    try
: l  A2 Y, P* B! M! N& W  H; b    {2 I. s; ^# `% Z" U' n
            $db = Db::getInstance()->connect();5 t2 [" S+ V* V, Q% ~& I
            $result = mysql_query($sql, $db);! N  Q3 f$ S' S2 W" f. R) k
            $newsList = array();
8 N/ s$ B3 f1 G. r: i, I( s            while($row = mysql_fetch_assoc($result)) ) |  q; O& H* i8 E
            {
% T/ F& v: r- L) h% E; ]) R1 C                    $newsList[] = $row;
6 q$ S( `6 C& ]) z* M: b            }
" k& b, Z0 b) b% m    }
5 i) Q2 u( F$ g: @' s3 `6 W5 ~    catch(Exception $e)
9 h6 u& V4 G$ f    {5 j: r2 K* I4 v- B! E
            // TODO
9 Q4 w6 m7 _4 m1 [+ v& n  E: k4 h    }, B7 b- {; I6 R# E1 M
    ob_start();& D7 K9 r% L. D. B) E5 I3 ~
    require_once('template/index.php');//引入模版文件9 K; Y6 d3 y' A3 A8 a
    file_put_contents('./index.html', ob_get_contents());//生成静态文件' [* T- H$ C; p$ H* P% x
    //ob_clean();5 v' s/ R" b+ H. c! U
}
) u7 B& \/ I1 n5 R" H, u0 N
. k! H/ e: P4 l0 L伪静态是影响服务器忄生能的,不是越多越好,需要按需求而定. V5 T) W) c) F

3 {* G) ?  A( D资源存放>百度网盘
# I8 d# u. `$ q" P+ P' J1 t
7 r* ]+ G  L- |; k, m4 o下载地址
2 X' U" n7 W; |3 q
游客,如果您要查看本帖隐藏内容请回复
! K8 ^9 b, _5 }
VIP会员全站免金币0 n+ _" Y6 V; k, n! H4 F4 l0 m
IT直通车已为全国各地程序员提供上千G课程资源
; z; H4 \( A/ r7 S, q2 Q4 F如您需要购买本站VIP会员,请点击「开通VIP」享受全站资源免金币无限制下载!
) c1 W1 O- ^( x! C3 ~, N1 p; C6 K# c; R$ L
失效反馈
# K# Y3 K2 D$ o9 O, eIT直通车所有资源都存放在自己注册的百度网盘,失效可修复,确保持续可用
; A3 h) |; a/ q3 [2 a如您需要的资源链接提示失效,请尽情反馈给我们,将在收到反馈后尽快修复「点击反馈
! u% U( n! q8 Z) W) l- P9 m) M+ F' o& j  W% P! r' w
获得帮助
. b4 ~/ H& h8 c! O7 J需要帮助吗?点击网站右侧在线客服,7X12小时在线!: S" M; f5 L' d2 K. ~

; k" h, F) M: g& J% ]& ^
回复

使用道具 举报

第一个甲马俳 发表于 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会员全站免金币下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

遇到问题联系客服

安全保证百分百处理 

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

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

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

更多课程

网站启用邮件对接VIP会员服务,不再使用QQ这种低效率工具,有事请发邮件到 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

返回顶部 返回列表