溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php頁面靜態(tài)化指的是什么

發(fā)布時(shí)間:2022-04-14 10:11:18 來源:億速云 閱讀:172 作者:iii 欄目:編程語言

這篇“php頁面靜態(tài)化指的是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“php頁面靜態(tài)化指的是什么”文章吧。

php頁面靜態(tài)化有兩種意思:1、把PHP動(dòng)態(tài)頁面保存成靜態(tài)的html文件,用戶訪問該靜態(tài)頁面,而不是用戶每一次訪問都重新生成一張相同的網(wǎng)頁,可以減小服務(wù)器開銷;2、將動(dòng)態(tài)頁面的url地址轉(zhuǎn)換成類似于靜態(tài)頁面的url地址,便于搜索引擎的收錄。

php頁面靜態(tài)化指的是什么

本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版、DELL G3電腦

PHP 頁面靜態(tài)化的概念

PHP靜態(tài)化分為:純靜態(tài)化 和 偽靜態(tài)化;

純靜態(tài)化:是把PHP生成的動(dòng)態(tài)頁面保存成靜態(tài)的html文件,用戶訪問該靜態(tài)頁面,而不是用戶每一次訪問都重新生成一張相同的網(wǎng)頁

優(yōu)點(diǎn)就是減小服務(wù)器開銷,

如果細(xì)分純靜態(tài),那么可以分為“局部純靜態(tài)”、“全部純靜態(tài)”:

  • 局部靜態(tài)化:是生成的靜態(tài)文件中,有局部的數(shù)據(jù)還是通過ajax技術(shù)動(dòng)態(tài)獲取的;

  • 完全靜態(tài)化:即不存在動(dòng)態(tài)獲取數(shù)據(jù)的情況,所以內(nèi)容都來自靜態(tài)的html頁面

偽靜態(tài)化:是指將動(dòng)態(tài)頁面的url地址轉(zhuǎn)換成類似于靜態(tài)頁面的url地址的過程

偽靜態(tài)化其實(shí)還是動(dòng)態(tài)訪問,其實(shí)質(zhì)是動(dòng)態(tài)生成數(shù)據(jù),你訪問的網(wǎng)址類似于"http://yourhost,com/index/post/12",是一個(gè)靜態(tài)地址,該地址多見于博客地址,但偽靜態(tài)化中,你訪問的網(wǎng)址實(shí)際上經(jīng)過服務(wù)器解析,還是會(huì)解析成類似于"http://yourhost,com/?c=index&a=post&id=12"的地址,所以稱之為偽靜態(tài)化

偽靜態(tài)的優(yōu)點(diǎn):美觀;便于搜索引擎收錄

純靜態(tài)化的實(shí)現(xiàn)

利用php內(nèi)置的ob函數(shù)實(shí)現(xiàn)頁面的靜態(tài)化,大概步驟如下:

<?php ob_start();//開啟緩存 
?>

<p>我是要生成的靜態(tài)內(nèi)容,也可以在該處鏈接數(shù)據(jù)庫生成動(dòng)態(tài)內(nèi)容于此</p>
<?php 
file_put_contents( 'index.html', ob_get_clean() );//把生成的靜態(tài)內(nèi)容保存到index.html文件,而不是輸出到瀏覽器

?>

觸發(fā)系統(tǒng)生成純靜態(tài)化頁面

方法:頁面添加緩存時(shí)間;手動(dòng)觸發(fā)

頁面添加緩存時(shí)間

<?php
$file_name = 'index.html';
if(file_exists( $file_name ) &&  filemtime( $file_name ) - time() < 10 ){//如果文件是存在并且最后修改時(shí)間小于設(shè)定時(shí)間 10s
    //filemtime( $file_name );//得到文件最后修改時(shí)間
    //time();//當(dāng)前時(shí)間
    require_once( $file_name );//引入文件
}else{
 ob_start( );
 ?>
<p>我是要生成的靜態(tài)內(nèi)容</p>
 <?php
file_put_contents( $file_name,  ob_get_contents() )//輸出到瀏覽器
}

如果后臺(tái)數(shù)據(jù)存在更細(xì),定時(shí)刷新不能及時(shí)更改靜態(tài)頁面,怎么辦?所有引入了手動(dòng)觸發(fā)的功能

手動(dòng)觸發(fā)

  手動(dòng)觸發(fā)的大概樣式就類似于優(yōu)酷視頻評(píng)論區(qū),當(dāng)有新評(píng)論時(shí),會(huì)后一條屎黃屎黃的小提示框:“有新評(píng)論,點(diǎn)擊更新”,也類似于app中的下滑刷新的機(jī)制,自己去尋找吧。。

除此之外還有Linux下的crontab定時(shí)掃描程序

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

局部靜態(tài)化內(nèi)容不做敘述

PHP偽靜態(tài)

// 靜態(tài):http://yourhost.com/index.php/12/2.html
// 動(dòng)態(tài):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 進(jìn)一步處理
}else{
    //錯(cuò)誤處理
    echo "err";
}

Apache服務(wù)器rewrite配置

在httpd.conf文件中,找到

#注釋:去掉前邊的" # "開啟rewrite服務(wù),重啟服務(wù)器生效
#LoadModule rewrite_module modules/mod_rewrite.so

#注釋:http-vhosts.conf文件是虛擬域名配置的文件,開啟改文件可以配置虛擬域名,一般默認(rèn)是開啟的
#Include conf/extra/httpd-vhosts.conf

如果你不會(huì)配置虛擬域名,可以參考我的另外一篇文章:WAMPServer配置修改及問題匯總

rewrite偽靜態(tài)配置

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    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


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

RewriteEngine其他配置規(guī)則以后會(huì)再添加

現(xiàn)在你訪問http://yourhost.com/vidio/12.html時(shí),相當(dāng)于訪問了http://yourhost.com/vidio.php?id=12

問題:配置完上面的內(nèi)容后,又存在以下問題?如果項(xiàng)目目錄下存在該靜態(tài)頁面時(shí),到底是訪問我們的靜態(tài)頁面還是訪問我們偽靜態(tài)的文件呢?

    經(jīng)過測試我們發(fā)現(xiàn),并不會(huì)訪問靜態(tài)頁面,如果我們想訪問我們的靜態(tài)頁面怎么辦?

偽靜態(tài)和靜態(tài)頁面沖突時(shí)解決辦法:

    #完整的配置規(guī)則如下
    RewriteEngine on
    #添加以下兩項(xiàng),!-d  和  !-f  分別表示  目錄 和 文件
    #當(dāng)訪問的偽靜態(tài)和相應(yīng)的靜態(tài)目錄和文件沖突時(shí),訪問靜態(tài)頁面
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
    RewriteRule ^/index/([0-9]*).html$ /index.php?id=$1

以上就是關(guān)于“php頁面靜態(tài)化指的是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI