首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP SHOW_RUN_TIME 無法顯示運行時間的根因與修復方案

     編輯:PHP 綜合知識

問題現象

在 ThinkPHP 專案中啟用 'SHOW_RUN_TIME' => true 後,模板中使用 {__RUNTIME__} 標籤有時無法正常輸出頁面運行時間。

根因分析

查看 ThinkPHP/Lib/Think/Core/View.class.php 中 output() 方法原始碼:

if (C('HTML_CACHE_ON')) HtmlCache::writeHTMLCache($content);
if ($display) {
    if (false !== strpos($content, '{__RUNTIME__}')) {
        $runtime = C('SHOW_RUN_TIME') ? ''.$this->showTime().'' : '';
        $content = str_replace('{__RUNTIME__}', $runtime, $content);
    }
    echo $content;
    // ...
}

問題:僅當模板內容包含 {__RUNTIME__} 時才替換並輸出運行時間。若模板未包含此標籤(或被緩存替換),運行時間將完全不顯示。

修復方案

修改 View.class.php 中的 output() 方法,確保無論模板是否包含標籤,運行時間都會輸出:

if (C('HTML_CACHE_ON')) HtmlCache::writeHTMLCache($content);
if ($display) {
    $runtime = C('SHOW_RUN_TIME') ? ''.$this->showTime().'' : '';
    if (false !== strpos($content, '{__RUNTIME__}')) {
        $content = str_replace('{__RUNTIME__}', $runtime, $content);
    } else {
        $content .= $runtime;  // 關鍵修復:無標籤時追加到頁面末尾
    }
    echo $content;
    if (C('SHOW_PAGE_TRACE')) $this->showTrace();
    return null;
} else {
    return $content;
}

修復邏輯說明

  1. 先計算運行時間字符串 $runtime
  2. 若模板含 {__RUNTIME__},執行替換(原有行為)
  3. 若模板不含該標籤,直接將運行時間追加到內容末尾 $content .= $runtime
  4. 最後統一輸出

驗證方式

  1. 修改 View.class.php 並保存
  2. 清除專案緩存(Runtime/Cache/ 目錄)
  3. 重新訪問頁面,頁面底部應顯示類似「0.0123s」的運行時間

延伸建議

  • 生產環境建議關閉 SHOW_RUN_TIME,避免洩露效能資訊
  • 搭配 SHOW_PAGE_TRACE 可獲得更詳細的執行追蹤
  • 若使用模板引擎標籤,請確保模板確實包含 {__RUNTIME__}

更多 ThinkPHP 相關技巧,請參考本站專題:《ThinkPHP 入門教程》及《ThinkPHP 常用方法總結》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved