頁面靜態化與偽靜態


 一、頁面靜態化

1、頁面靜態化介紹

 說明

頁面靜態化就是將PHP查詢的結果保存到一個靜態的html文件中將來用戶訪問的時候直接訪問該靜態html文件即可

相對於頁面緩存的比較:

緩存減輕了數據庫的壓力,但是服務器(php)壓力依然存在

頁面靜態化之后:減輕了服務器、數據庫的壓力

 

 

使用頁面靜態化

查詢比較頻繁不經常更新的內容,可以使用頁面靜態化,例如新聞、文章

但是數據經常變化的評論天氣情況股票等就不適合使用頁面靜態化

 

頁面靜態化使用什么技術實現呢

就使用ob緩沖、結合file_put_contents函數實現

 

2、ob緩沖介紹 

ob緩沖是服務器向客戶端響應數據時存儲響應數據的臨時空間,

服務器在向客戶端推送數據之前,不是一次性把所有的數據都給客戶端,而是先pushob緩沖區域,再一點一點給客戶端,減輕服務器的壓力。

 

 

開啟ob緩沖

php.ini配置文件中找到output buferring

 

ob緩沖相關函數

ob_start() 開辟一塊新的緩沖區域

只要ob_start()一次就會在PHP的緩存中開辟一塊緩沖區域

而且,服務器輸出的內容會先輸出到緩沖區域,再給客戶端響應

ob_get_contents() 獲取緩沖區域里面的內容

ob_get_length() 獲取緩沖區域內容長度

ob_flush() 將緩沖區域的內容直接刷出\輸出

ob_get_flush() 獲得緩沖區域刷出的內容

ob_clean():清空緩沖區域的內容

ob_get_clean():獲得清空的緩沖區域的內容

 

ob緩沖處理器

說明

ob緩沖處理器,就是在輸出緩沖區域的內容之前,使用某個函數進行處理

通常我們會使用ob_gzhandler處理器進行壓縮處理

 

ob多緩沖

 說明

我們可以在PHP里面開啟多塊緩沖區域ob_start()一次,就會在PHP里面創建一塊緩沖區域,而且,將來ob_clean清空緩沖區域時,操作的是離開啟緩沖最近那個緩沖區域

 

 

2、ob緩沖實現頁面靜態化

 說明

服務器響應給客戶端的數據會先輸出到緩沖區域

服務器向客戶端響應數據的方式:echovar_dumprequireinclude

 

兩步生產靜態html

 (1)先將require_once加載的模板內容,保存到緩沖區域,再讀取並輸出到靜態html文件

(2)使用file_put_contents函數生成html文件

 

注意:使用smarty是可通過fetch方法獲取$content  (smarty封裝了ob緩沖)

$content = $smarry->fetch('xxx.html')

 

二、偽靜態

1、偽靜態介紹

說明

頁面靜態化是真靜態,因為生產靜態的html文件,所謂的偽靜態是假的靜態,偽靜態的效果是這個樣子:http://localhost/app/xxxcontroller/add

訪問的時候會進入控制器的add方法中,但是給用戶的感覺是靜態頁面,實際上還是會動態解析即 index.php?c=xxxcontroller&a=addAction

,所以稱之為偽靜態。

 

偽靜態的優點

(1) url地址簡潔,方便用戶記憶

(2) SEO(搜索引擎優化)(注:搜索引擎包括:百度、360搜索、搜狗、谷歌),比較友好

index.php?m=home&c=question&a=indexAction,會根據參數的不同進入到不同的頁面(日歷:y=2019&m=12&d=22),擔心頁面沒有窮盡,當然現在搜索引擎技術不斷進步(對動態網站內容專區也會越來越好)

使用偽靜態的地址:question/index.html,看到網頁的時候認為你是靜態的網頁多抓取。因此便於搜索引擎收錄。

 

 

2、偽靜態實現

(1) 借助PHP超全局數組變量:$_SERVER[‘PATH_INFO’]獲得路徑的信息,如果index.php后面有路徑信息則返回,如果index.php后面沒有路徑信息,則提示未定義

 

 

(2)根據index.php后面的路徑的信息,解析出對應的$_GET[‘m’]$_GET[‘c’]$_GET[‘a’]

偽靜態地址基本類型:

情況1admin

解析到后台進入到默認的控制器默認方法中

情況2admin/question

解析到后台模塊的question控制器默認的動作

情況3admin/question/add

解析到后台、question控制器的add方法

情況4admin/question/delete/id/2

解析到后台、question控制器、delete方法額外參數是id=2

 

解析規則:

先把.html.htm 這樣的字符替換掉

字符串分割:explode()炸開,獲得數組

根據炸開之后的數組的元素個數進行分類。

 

3、隱藏入口文件

說明

有的網站不想讓用戶看到網站采用什么語言開發、其次想讓url地址更加簡潔,所以通常直接訪問網站,不需要攜帶index.php。

 

實現:

(1)直接通過修改apache的配置文件實現當訪問的url地址指向的不是一個文件不是一個目錄的時候將該url地址信息作為index.php后面的PATH_INFO進行處理。

(2)apache提供了一個分布式配置文件(.htaccess),分布式配置文件,只針對當前項目有效,對其他項目沒有影響,而且不用重啟apache服務器。

 

 

步驟

步驟1:首先要在apache的配置文件中開啟重寫模式(也就是允許使用分布式配置系統)

 

步驟2:在項目根目錄創建.htaccess文件

 

<IfModule rewrite_module>
    #開啟重寫引擎
    RewriteEngine on
    #重寫的條件(訪問的url地址指向的不是文件、不是目錄的時候,采用重寫機制)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    
    #重寫規則
    RewriteRule (.*) index.php/$1    
</IfModule>

#當訪問的是一個目錄時,會將如下文件作為默認的歡迎頁面,會先顯示index.html,如果沒有則顯示index.php
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM