日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP 页面静态化/纯静态化/伪静态化

發布時間:2024/9/30 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP 页面静态化/纯静态化/伪静态化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:https://www.cnblogs.com/caoruiy/p/4698938.html

概念

PHP靜態化分為:純靜態化 和 偽靜態化;純靜態化又分為:局部靜態化 和 完全靜態化

純靜態化:是把PHP生成的動態頁面保存成靜態的html文件,用戶訪問該靜態頁面,而不是用戶每一次訪問都重新生成一張相同的網頁,優點就是減小服務器開銷,

  局部靜態化:是生成的靜態文件中,有局部的數據還是通過ajax技術動態獲取的;

局部頁面靜態化就是指在純html靜態化文件中有部分的數據是動態獲取的;

它所用的技術就是ajax技術;

它的原理就是在生成純靜態html文件的模版文件中,使用ajax技術來動態的獲取并更新需要動態的部分;

這樣,在生成的純靜態的html文件中就包括了動態數據的部分,而這個文件就是局部靜態化的html文件;

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

偽靜態化:其實還是動態訪問,其實質是動態生成數據,你訪問的網址類似于"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 webmaster@dummy-host.example.comDocumentRoot "c:/Apache24/docs/dummy-host.example.com"ServerName dummy-host.example.comServerAlias www.dummy-host.example.comErrorLog "logs/dummy-host.example.com-error.log"CustomLog "logs/dummy-host.example.com-access.log" common#配置規則如下所示RewriteEngine onRewriteRule ^/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} !-dRewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-fRewriteRule ^/index/([0-9]*).html$ /index.php?id=$1

總結

以上是生活随笔為你收集整理的PHP 页面静态化/纯静态化/伪静态化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。