tp3.2行為擴充套件在靜態快取前增加pvuv網站統計或一些操作
阿新 • • 發佈:2020-12-17
網站配置靜態快取
\Index\Common\Conf\config.php
'HTML_CACHE_ON' => true, // 開啟靜態快取 'HTML_CACHE_TIME' => 7200, // 全域性靜態快取有效期(秒)(3600*24*7) 'HTML_FILE_SUFFIX'=> '.shtml', // 設定靜態快取檔案字尾 'HTML_CACHE_RULES'=> array( // 定義靜態快取規則 'Index:index' =>array('{:controller}_{:action}/index'), // 定義格式1 陣列方式 // 定義格式2 字串方式 //後一個引數是靜態快取有效期,單位為秒。如果不定義,則會獲取配置引數HTML_CACHE_TIME 的設定值,如果定義為0則表示永久快取。 )
//增加操作
行為擴充套件 檢視手冊
app_init 應用初始化標籤位
path_info PATH_INFO檢測標籤位
app_begin 應用開始標籤位
action_name 操作方法名標籤位
action_begin 控制器開始標籤位
view_begin 檢視輸出開始標籤位
view_parse 檢視解析標籤位
template_filter 模板內容解析標籤位
view_filter 檢視輸出過濾標籤位
view_end 檢視輸出結束標籤位
action_end 控制器結束標籤位
app_end 應用結束標籤位
比如說配置表單令牌
Index\Common\Conf\tags.php
<?php
return array(
'view_filter' =>array(
'Behavior\TokenBuildBehavior', // 表單令牌
),
);
Behavior\TokenBuildBehavior檔案路徑具體位置:\ThinkPHP\Library\Behavior\TokenBuildBehavior.class.php
所以在這個同目錄下建立一個檔案
CountBehavior.class.php
<?php /** * 網站統計 */ namespace Behavior; use Org\Util\RedisManager; class CountBehavior { // 行為擴充套件的執行入口必須是run public function run(&$params){ if (C('COUNT_ON')) {//如果沒有這個判斷所有應用都會執行 var_dump(session());die; } } }
配置完成後需要在配置檔案中加上COUNT_ON這個值
\Index\Common\Conf\config.php
'COUNT_ON' => true, // 開啟網站統計
'HTML_CACHE_ON' => true, // 開啟靜態快取
'HTML_CACHE_TIME' => 7200, // 全域性靜態快取有效期(秒)(3600*24*7)
'HTML_FILE_SUFFIX'=> '.shtml', // 設定靜態快取檔案字尾
'HTML_CACHE_RULES'=> array( // 定義靜態快取規則
'Index:index' =>array('{:controller}_{:action}/index'),
// 定義格式1 陣列方式
// 定義格式2 字串方式
//後一個引數是靜態快取有效期,單位為秒。如果不定義,則會獲取配置引數HTML_CACHE_TIME 的設定值,如果定義為0則表示永久快取。
)
當前配置好了
先看看快取目錄有沒有檔案,測試快取生效\Index\Html,有檔案生成
Index\Common\Conf\tags.php裡面配置的行為是在tp核心公共配置之後的,如果開始靜態後想要在tags檔案配置靜態前做些東西,可能有些麻煩
看公共配置檔案\ThinkPHP\Mode\common.php
// 行為擴充套件定義
'tags' => array(
'app_init' => array(
'Behavior\BuildLiteBehavior', // 生成執行Lite檔案
),
'app_begin' => array(
'Behavior\ReadHtmlCacheBehavior', // 讀取靜態快取
),
'app_end' => array(
'Behavior\ShowPageTraceBehavior', // 頁面Trace顯示
),
'view_parse' => array(
'Behavior\ParseTemplateBehavior', // 模板解析 支援PHP、內建模板引擎和第三方模板引擎
),
'template_filter'=> array(
'Behavior\ContentReplaceBehavior', // 模板輸出替換
),
'view_filter' => array(
'Behavior\WriteHtmlCacheBehavior', // 寫入靜態快取
),
),
這些是預設的行為擴充套件。對應app_begin的是先讀取靜態快取檔案
按照先後順序,那麼有兩種方法
1.在應用下Index\Common\Conf\tags.php配置app_init,並呼叫方法
'app_init' => array(
'Behavior\CountBehavior',
),
2.直接在tp的公共配置檔案\ThinkPHP\Mode\common.php裡面加入行為控制,並在靜態快取讀取之前
// 行為擴充套件定義
'tags' => array(
'app_init' => array(
'Behavior\BuildLiteBehavior', // 生成執行Lite檔案
),
'app_begin' => array(
'Behavior\CountBehavior',//順序執行,在靜態之前載入,但是需要初始化應用後
'Behavior\ReadHtmlCacheBehavior', // 讀取靜態快取
),
'app_end' => array(
'Behavior\ShowPageTraceBehavior', // 頁面Trace顯示
),
'view_parse' => array(
'Behavior\ParseTemplateBehavior', // 模板解析 支援PHP、內建模板引擎和第三方模板引擎
),
'template_filter'=> array(
'Behavior\ContentReplaceBehavior', // 模板輸出替換
),
'view_filter' => array(
'Behavior\WriteHtmlCacheBehavior', // 寫入靜態快取
),
),
這樣按照先後順序就可以在讀取靜態檔案之前進行一些操作
如果想要在這裡讀取session需再去找些配置,比如從入口檔案開始追
index.php
require './ThinkPHP/ThinkPHP.php';
\ThinkPHP\ThinkPHP.php
Think\Think::start();
\ThinkPHP\Library\Think\Think.class.php
App::run();
\ThinkPHP\Mode\Api\App.class.php
static public function run() {
// 應用初始化標籤
Hook::listen('app_init');
App::init();
// 應用開始標籤
Hook::listen('app_begin');
// Session初始化
if(!IS_CLI){
session(C('SESSION_OPTIONS'));
}
// 記錄應用初始化時間
G('initTime');
App::exec();
// 應用結束標籤
Hook::listen('app_end');
return ;
}
可以看到session初始化是在app_begin之後的,如果要使用session就需要在app_begin之後,session是可以調整位置的,可以把它調整到app_begin前面
static public function run() {
// 應用初始化標籤
Hook::listen('app_init');
App::init();
// Session初始化
if(!IS_CLI){
session(C('SESSION_OPTIONS'));
}
// 應用開始標籤
Hook::listen('app_begin');
// 記錄應用初始化時間
G('initTime');
App::exec();
// 應用結束標籤
Hook::listen('app_end');
return ;
}
這樣就可以在讀取靜態檔案前幹些事情,可以讀取session
就這些~ ^∨^