php實現頁面靜態化(純靜態&&偽靜態)
1、開啟buffer
•在php.ini中的output_buffering開啟
•在php檔案中應用ob_start()函式開啟
; Default Value: Off ; Development Value: 4096 ; Production Value: 4096 ; output_buffering = 4096
2、獲取緩衝區的內容
output_buffering=on 需要先開起,才幹呼叫ob_get_contents()函式。但是,如果不開啟output_buffering時,當在標頭檔案中呼叫函式ob_start()函式時,ob_get_contents()也能應用。
ob_get_content();//返回輸出緩衝區的內容;
PHP如何實現頁面純靜態化
基本方式
1、file_put_contents
2、應用PHP內建快取機制實現頁面靜態化output_buffering
ob_start()//如果php.ini已經開啟,那麼這裡會開啟一個新的輸出緩衝區; ob_get_contents()//獲取輸出緩衝區內容; ob_clean()//清空輸出緩衝區內容,但是不會刪除輸出緩衝區 ob_get_clean//獲取輸出緩衝區內容並且刪除輸出緩衝區,等價於ob_get_contents和ob_end_clean)
下方這段程式碼,執行是不會有輸出的
原因就是輸出緩衝區被清空了,看上圖理解
ob_start(); echo 777; echo 000; ob_clean(); echo ob_get_contents();
純靜態實現,程式碼和實現邏輯參考:
<?php /** * 觸發系統生成純靜態化頁面業務邏輯 * 有3種方案: * 第一:定時掃描程式(利用crontab來處理)
* 第二:手動觸發方式,人為觸發 * 第三:頁面新增快取光陰,在頁面中把持光陰來操作 */ //=========================================== //生成純靜態檔案步驟 //1、連線資料庫,然後從資料庫裡面獲取資料 //2、把獲取到的資料填充到模版檔案裡面 //3、需要把動態的頁面轉為靜態頁面,生成靜態化檔案 //============================================ //PHP實現頁面靜態化有以下步驟: //1:A.php請求資料庫資料:通過mysql或者mysqli或者PDO擴充套件
//2:在A.html中輸出A.php請求的資料庫資料:一般是將將在資料庫中取出的陣列形式的資料賦予新的陣列,並且輸出 //3:在A.php中包孕A.html檔案:直接通過require_once()函式或者inclde_once() //4:開啟資料快取ob_start()=>獲取獲取快取內容並且將資料生成在靜態檔案中file_put_contents('index.shtml',ob_get_clean()); //header("content-type:text/htm;charset=utf-8");
if(is_file('./index.html') && (time() - filemtime('./index.html') < 1200)) { //快取未失效則直接載入靜態檔案 require_once('./index.html'); } else { //快取失效了則重新生成 // 引入資料庫
靜態頁面中區域性動態化實現
利用Jquery中的ajax請求檔案,獲取到返回的JSON資料,然後使用到模版就可以了
偽靜態
Nginx伺服器預設不支援PATH INFO模式,需要額外配置
Apache偽靜態設定1、開啟apache mod_rewrite.so 配置 在 httpd.conf中。
測試的話可以用phpinfo檢視,看是否loaded modules 有這個模組
2、inculde conf/extra/httpd-vhosts.conf virtual hosts支援,虛擬域名配置
3、編輯vartual host 檔案
4、本機host檔案加入配置的域名(如果需要本機測試針對windows)
5、偽靜態配置
- 5.1 rewrite engine on
- 5.2編寫規則
^/post/([0-9]*).html$ /post.php?id=$1
放在 virtualhost 段中
post.php 中編寫
<?php echo 'this is '.$_GET['id'];
然後可以造訪a.com/123.html 返回的就是this is 123.
擴充套件:如果目錄下有123.html這個真正的檔案,那麼還是載入了動態的post
123.
那麼如何設定呢,想要當前檔案有了真正的靜態檔案,那麼需要以下配置了
RewriteEngine on RewriteRule ^/post/([0-9]*).html$ /post.php?id=$1 #存在目錄 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d #存在檔案 RewriteCond%{DOCUMENT_ROOT}%{REQUEST_FILENAME}}!-f
以上兩句話意思是如果根目錄下有請求的目錄或者檔案,那就用他
當然這個要放在剛剛的那個rewrite的上面。
Nginx偽靜態