PHP實現頁面靜態化

2021-08-04 07:33:18 字數 3742 閱讀 2325

一、buffer認知

buffer:php存在的緩衝區,乙個記憶體位址空間,主要用於儲存資料區域

可在php.ini中開啟引數

output_buffering = on

或者在php檔案中手動開啟

ob_start 開啟輸出控制緩衝

ob_get_contents 返回輸出緩衝區內容

ob_clean 清空輸出緩衝區,清空後不會在終端顯示

ob_get_clean 得到當前緩衝區的內容並刪除當前緩衝區內容,清空後不會在終端顯示

二、實現靜態化方式

1、file_put_contents(「靜態頁面檔名」,需要儲存的資料)

2、使用php內建快取機制實現頁面靜態化

ob_start() –>

require(「檔案」) /模板檔案 –>

if(file_get_contents(「檔名」, ob_get_contents()){}else{}

ob_end_flush();

3、fopen->fwrite->fclose

三、觸發系統生成靜態化頁面的方式

1、頁面新增快取時間

2、手動觸發方式

3、crontab定時掃瞄程式(linux)

四、例項

1、頁面新增快取時間

<?php

$gid = $_get['gid'];//商品id

$goods_statics_file = "goods_file_".$gid.".html";//對應靜態頁檔案

$expr = 3600*24*5

//靜態檔案有效期5天

if(file_exists($goods_statics_file))else

}else

?>

五、區域性動態化實現

ajax

六、偽靜態

1、通過正規表示式處理

/newlist.php/2/1.html

備註:nginx伺服器不支援pathinfo模式

preg_match(『/^\/(\d+)\/(\d+).html/』, $_server[『path_info』], $match);

$type = $match[1];

$category_id = $match[2];

2、web伺服器rewrite配置

apache下rewrite配置:

(1) 虛擬網域名稱配置

httpd.conf檔案中開啟相關模式

loadmodule rewrite_module modules/mod_rewrite.so

include conf/extra/httpd-vhosts.conf(apache預設是include conf/vhosts.conf)

找到hosts檔案配置網域名稱

(2) httpd_vhosts.conf配置檔案相關資訊

在.htaccess中加入

rewriteengine

onrewritecond

% !-d

rewritecond

% !-f

rewriterule

^(.*)$ /index.php[l,e=path_info:$1]

將 轉換為:

rewritecond % ^(\w+)=(\w+)$

rewriterule ^/path /path/%1/%2?

rewriterule重寫規範flag說明

[r=301] 強制外部重定向 301永久重定向 302臨時重定向 預設302

[c] 鏈結下一條規則,如果這一條不匹配,下一條就不進入

[l] 結束規則,立即停止重寫操作,並不再應用其他重寫規則

[ne] 不對url中的特殊字元進行hexcode轉碼

[nc] 不區分大小寫

[qsa] 用於在url中擷取查詢字串

[g] apache伺服器返回410

[f] (force url to be forbidden)禁用url,返回403http狀態碼。

[n](next round) 重新從第一條規則開始執行重寫過程。

[t]=mime-type(force mime type) 強制mime型別

[ns] (used only if no internal sub-request) 只用於不是內部子請求

[pt](pass through to next handler) 傳遞給下乙個處理

例如:

rewriterule ^/abc(.*) /def$1 [pt] # 將會交給/def規則處理

alias /def /ghi

[s]=num(skip next rule(s)) 跳過num條規則

[e]=var:val(set environment variable) 設定環境變數

rewritebase url-path 設定了目錄級重寫的基準url

rewritecond 指定定義了乙個規則的條件,即在rewriterule前加乙個條件

1、teststring 使用說明 1−

9 1-9 引用緊跟在rewritecond後面的rewriterule中模板中匹配的資料

2、teststring 使用說明 % 伺服器變數引用

3、teststring 使用說明 %1-9

%1-9 rewritecond條件中最後符合的條件中的分組成分

4、condpattern 使用說明

-d 是否是目錄 -f 是否是檔案

5、[flags]使用說明

[nc] 不區分大小寫

[or] 或語法,如果不加,預設為and

rewritemap

mapname 命名給rewriterule呼叫

maptype 檔案型別有txt、rnd

mapsource map檔案路徑

基於重定向的檔案訪問控制

防盜煉:

限制ip

rewritemap  hosts-deny(拒絕的位址)

rewritecond

$ | notfound} deny[or]

rewritecond

$ | notfound} deny

rewriterule

^ -[f]

限制迅雷

先通過**分析出迅雷特徵

rewritecond

% 2.0.50727[nc,or]

rewritecond

% ^blackwido[nc,or]

rewriterule

. abuse.txt

然後獎abuse.txt檔案放到主目錄下

thinkphp配置url

rewritecond

% !-d

rewritecond

% !-f

rewriterule

^(.*)$ index.php/$1

[qsa,pt,l]

PHP保持靜態頁面,php實現頁面靜態化

php實現頁面靜態化 2017 4 19 hubo php開發 1.頁面分為靜態頁面和動態頁面,載入動態頁面會去執行動態檔案 php jsp等 會經過語法分析 編譯 執行等程式,而靜態頁面就是html 不需要經過動態檔案的過程,直接執行就可以了,所以載入靜態檔案要比載入動態檔案要快。3.動態頁面靜態...

php實現頁面靜態化

php生成靜態html頁面的方法 1.gid get gid 0 商品id goods statis file goods file gid.html 對應靜態頁檔案 expr 3600 24 10 靜態檔案有效期,十天 if file exists goods statis file else e...

PHP實現頁面靜態化

1 通過buffer來實現 需要用file put contents ob get clean 等內建函式 ob start include filterpost.html mtime filemtime filterpost.html 在這裡可以判斷檔案是否存在和過期,然後做快取或者生成靜態檔案操...