php頁面靜態化是什麼意思

2022-04-14 10:00:24

php頁面靜態化有兩種意思:1、把PHP動態頁面儲存成靜態的html檔案,使用者存取該靜態頁面,而不是使用者每一次存取都重新生成一張相同的網頁,可以減小伺服器開銷;2、將動態頁面的url地址轉換成類似於靜態頁面的url地址,便於搜尋引擎的收錄。

本教學操作環境:windows7系統、PHP7.1版、DELL G3電腦

PHP 頁面靜態化的概念

PHP靜態化分為:純靜態化 和 偽靜態化;

純靜態化:是把PHP生成的動態頁面儲存成靜態的html檔案,使用者存取該靜態頁面,而不是使用者每一次存取都重新生成一張相同的網頁

優點就是減小伺服器開銷,

如果細分純靜態,那麼可以分為「區域性純靜態」、「全部純靜態」:

  • 區域性靜態化:是生成的靜態檔案中,有區域性的資料還是通過ajax技術動態獲取的;

  • 完全靜態化:即不存在動態獲取資料的情況,所以內容都來自靜態的html頁面

偽靜態化:是指將動態頁面的url地址轉換成類似於靜態頁面的url地址的過程

偽靜態化其實還是動態存取,其實質是動態生成資料,你存取的網址類似於"http://yourhost,com/index/post/12",是一個靜態地址,該地址多見於部落格地址,但偽靜態化中,你存取的網址實際上經過伺服器解析,還是會解析成類似於"http://yourhost,com/?c=index&a=post&id=12"的地址,所以稱之為偽靜態化

偽靜態的優點:美觀;便於搜尋引擎收錄

純靜態化的實現

利用php內建的ob函數實現頁面的靜態化,大概步驟如下:

<?php ob_start();//開啟快取 
?>

<p>我是要生成的靜態內容,也可以在該處連結資料庫生成動態內容於此</p>
<?php 
file_put_contents( 'index.html', ob_get_clean() );//把生成的靜態內容儲存到index.html檔案,而不是輸出到瀏覽器

?>

觸發系統生成純靜態化頁面

方法:頁面新增快取時間;手動觸發

頁面新增快取時間

<?php
$file_name = 'index.html';
if(file_exists( $file_name ) &&  filemtime( $file_name ) - time() < 10 ){//如果檔案是存在並且最後修改時間小於設定時間 10s
    //filemtime( $file_name );//得到檔案最後修改時間
    //time();//當前時間
    require_once( $file_name );//引入檔案
}else{
 ob_start( );
 ?>
<p>我是要生成的靜態內容</p>
 <?php
file_put_contents( $file_name,  ob_get_contents() )//輸出到瀏覽器
}

如果後臺資料存在更細,定時重新整理不能及時更改靜態頁面,怎麼辦?所有引入了手動觸發的功能

手動觸發

  手動觸發的大概樣式就類似於優酷視訊評論區,當有新評論時,會後一條屎黃屎黃的小提示框:「有新評論,點選更新」,也類似於app中的下滑重新整理的機制,自己去尋找吧。。

除此之外還有Linux下的crontab定時掃描程式

*/5****php/data/static/index.php

區域性靜態化內容不做敘述

PHP偽靜態

// 靜態:http://yourhost.com/index.php/12/2.html
// 動態:http://yourhost.com/index.php?type=12&id=2
$pathinfo = $_SERVER['PATH_INFO'];
if( preg_match('/^\/(\d+)\/(\d+)/', $pathinfo,$path) ){
    $type = $path[1];
    $id = $path[2];
    echo 'type=',$type,'&id=',$id;//獲得type 和 id 進一步處理
}else{
    //錯誤處理
    echo "err";
}

Apache伺服器rewrite設定

在httpd.conf檔案中,找到

#註釋:去掉前邊的" # "開啟rewrite服務,重新啟動伺服器生效
#LoadModule rewrite_module modules/mod_rewrite.so

#註釋:http-vhosts.conf檔案是虛擬域名設定的檔案,開啟改檔案可以設定虛擬域名,一般預設是開啟的
#Include conf/extra/httpd-vhosts.conf

如果你不會設定虛擬域名,可以參考我的另外一篇文章:WAMPServer設定修改及問題彙總

rewrite偽靜態設定

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "c:/Apache24/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common


    #設定規則如下所示
    RewriteEngine on
    RewriteRule ^/vidio/([0-9]*).html$ /vidio.php?id=$1
    
</VirtualHost>

RewriteEngine其他設定規則以後會再新增

現在你存取http://yourhost.com/vidio/12.html時,相當於存取了http://yourhost.com/vidio.php?id=12

問題:設定完上面的內容後,又存在以下問題?如果專案目錄下存在該靜態頁面時,到底是存取我們的靜態頁面還是存取我們偽靜態的檔案呢?

    經過測試我們發現,並不會存取靜態頁面,如果我們想存取我們的靜態頁面怎麼辦?

偽靜態和靜態頁面衝突時解決辦法:

    #完整的設定規則如下
    RewriteEngine on
    #新增以下兩項,!-d  和  !-f  分別表示  目錄 和 檔案
    #當存取的偽靜態和相應的靜態目錄和檔案衝突時,存取靜態頁面
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
    RewriteRule ^/index/([0-9]*).html$ /index.php?id=$1

推薦學習:《》

以上就是php頁面靜態化是什麼意思的詳細內容,更多請關注TW511.COM其它相關文章!