用PHP去實現靜態化
我們在PHP網站開發過程中為了網站的推廣或者SEO的需要,需要對網站進行一定的靜態化,這裡設計到什麼是靜態頁面,所謂的靜態頁面,並不是頁面中沒有動畫等元素,而是指網頁的代碼都在頁面中,即不需要再去執行PHP指令碼等伺服器端的語言去運行,我們可以直接存取到的網頁,這就是靜態網頁。
那麼靜態網頁有什麼好處呢?第一個主要原因就是因為搜尋引擎,由於搜尋引擎對PHP頁面搜鹿和html頁面的收錄有一定的差別,並且面臨著頁面資源的佔用問題,我們需要對.php檔案進行靜態化。有一種方式是改寫訪問地址,可以通過URL的PATHINFO模式來修改它,讓它看上去更像一個靜態頁面,從而有更大的幾率被搜尋引擎抓取和收錄。
第二點原因就是它可以方便頁面的載入,有時候我們去一些比如新浪、網易這些網站的首頁,發現內容非常多,但是它的載入時間還真的不長,這裡面也有靜態化的功勞。網站可以在使用者訪問網站之前就通過一定的程式來進行靜態化,產生靜態頁面,當使用者去訪問該頁面的時候,由於訪問的是靜態頁面,因此,訪問速度會比訪問動態網頁面的速度快了很多倍。這種技術對於大網站來說很有必要,對於小網站也可以採用。它在前台的表現是頁面載入速度變快,在背景表現是減少了資料庫的串連,減少了資料庫的壓力,唯一的缺點就是相對占的硬碟多一些,不過,硬碟相對廉價的多。
既然瞭解了靜態化的一些優點,那麼如何做到靜態化呢?我們用PHP所能做到的靜態化分為純靜態化和偽靜態化,二者的卻別在於聖經靜態頁面的機制不同,偽靜態化就是通過解析URL和使用重寫入模式來運行動態網頁面,它只是對搜尋引擎比較友好,並不是真正意義上的靜態化,下面我們介紹一下純靜態化。
所謂純靜態化,就是產生HTML檔案的方式,我們需要開啟PHP內建的緩衝機制,即ob_start來開啟緩衝,並且在ob_start之前不能有任何輸出,否則執行失敗,然後我們用ob_get_contents函數來擷取緩衝中的內容,該函數會返回一個字串,第三個函數就是ob_end_clean,它用來清空緩衝中的內容並且關閉,成功返回True,失敗返回False。
下面請看執行個體:
這裡我們從資料庫中取出資料並且把這些資料產生之後緩衝到頁面中,下面是該php檔案:
我們運行上述頁面之後,發現該檔案夾下自動多了一個html檔案,下面是它的代碼:array (size=6) 0 => array (size=4) 'id' => string '1' (length=1) 'level' => string '0' (length=1) 'name' => string '辛星' (length=6) 'pwd' => string 'bd04fcc97578ce33ca5fb331f42bc375' (length=32) 1 => array (size=4) 'id' => string '2' (length=1) 'level' => string '1' (length=1) 'name' => string '小倩' (length=6) 'pwd' => string '61cb72858be523b9926ecc3d7da5d0c6' (length=32) 2 => array (size=4) 'id' => string '3' (length=1) 'level' => string '1' (length=1) 'name' => string '小楠' (length=6) 'pwd' => string 'a3d2de7675556553a5f08e4c88d2c228' (length=32) 3 => array (size=4) 'id' => string '4' (length=1) 'level' => string '1' (length=1) 'name' => string '劉強' (length=6) 'pwd' => string 'fcdb06a72af0516502e5fdccc9181ee0' (length=32) 4 => array (size=4) 'id' => string '5' (length=1) 'level' => string '1' (length=1) 'name' => string '星哥' (length=6) 'pwd' => string '866a6cafcf74ab3c2612a85626f1c706' (length=32) 5 => array (size=4) 'id' => string '6' (length=1) 'level' => string '1' (length=1) 'name' => string '辛勇' (length=6) 'pwd' => string 'e93beb7663f3320eaa0157730d02dd0c' (length=32)
當然這份代碼是我們寫的php程式自動產生的,可以用瀏覽器直接存取,從而減輕了資料庫的壓力。