錯誤頁面重定向

我是以爲錯誤頁面重定向分爲兩種php

形成不一樣點在於入口index.php文件,差異html

define('APP_DEBUG',false);

 

一 按手冊   搜索 「異常處理」,那樣配置,我以爲這種配置是在,  APP_DEBUG  爲TRUE的狀況處理的數據庫

在config 文件配置session

 'SHOW_PAGE_TRACE' => false,
    'SHOW_ERROR_MSG' => false,
    'ERROR_MESSAGE' => '發生錯誤!',
    'ERROR_PAGE' =>'/Public/error',
    /* 錯誤頁面模板 */
    'TMPL_ACTION_ERROR'     =>  MODULE_PATH.'View/Public/error.html', // 默認錯誤跳轉對應的模板文件'
    'TMPL_ACTION_SUCCESS'   =>  MODULE_PATH.'View/Public/success.html', // 默認成功跳轉對應的模板文件'
    'TMPL_EXCEPTION_FILE'   =>  MODULE_PATH.'View/Public/error.html',// 異常頁面的模板文件

固然 你要確保你的文件路徑是對的this

 

二    當咱們上線的正式環境是,調試是要關閉的APP_DEBUG  爲false的狀況處理的,那麼就會發現一個坑!!!!!spa

輸入錯誤的路徑,你會發現  居然不會跳轉到  你定義的404頁面!!!!!debug

後面再這裏找到辦法https://www.cnblogs.com/dee0912/p/5140063.html調試

1、入口文件關閉調試,配置文件配置異常頁面

在生產環境中系統的錯誤信息不能暴露給用戶,入口文件的 APP_DEBUG 默認爲開啓狀態日誌

define('APP_DEBUG',true);

此時若是用戶訪問到不存在的模塊、控制器或者方法會出現:code

 

在生產環境中須要把 APP_DEBUG 設置爲 FALSE 或者將該定義屏蔽:

define('APP_DEBUG',false);

此時若是用戶訪問到不存在的模塊、控制器或者方法會出現:

這個錯誤的默認模板頁在 ./ThinkPHP/Tpl/think_exception.tpl,能夠設置自定義的異常頁面來代替 ThinkPHP 默認的錯誤頁面,在配置文件 config.php 中配置:

    //異常頁面
    'TMPL_EXCEPTION_FILE' => './Public/Admin/error.html',

 

在訪問不存在的模塊、控制器或方法時,會加載默認的或者自定義的異常頁面模板。

 

2、定義 EmptyController 類

例如在 Admin 模塊下建立一個 EmptyController.class.php,裏面的 index 方法定義當用戶訪問一個不存在的控制器時系統該如何處理:

複製代碼
<?php
namespace Admin\Controller;
use Think\Controller;

class EmptyController extends Controller{
    public function index(){
       //跳轉或加載404頁
    }
}
複製代碼

 

3、定義空操做 _empty()

例如在 Admin 模塊的  Common 控制器中定義一個 _empty() 方法,當用戶訪問一個不存在的方法時,就會按照空方法中的設置進行處理:

    //空方法
    function _empty() {
        //跳轉或加載404頁
    }

注:若是同時請求一個不存在的控制器和一個不存在的方法,或者請求一個不存在的模塊時,會加載默認或者自定義的異常頁面,而不會執行 EmptyController::index 或 _empty()。

 

4、數據庫錯誤

在默認狀況下,若是程序中的 SQL 語句出現了語法錯誤,極可能會把數據庫信息暴露給用戶:

注:在 APP_DEBUG 爲 TRUE 且沒有自定義異常頁面時發生數據庫錯誤會輸出以上信息。

在關閉 APP_DEBUG 後,遇到數據庫錯誤時,會加載默認的或者自定義的異常頁面。若是但願在發生數據庫錯誤時進行自定的處理時,能夠在配置文件中設置數據庫調試模式爲 FALSE(該配置默認值是 TRUE):

'DB_DEBUG'  =>  FALSE, // 數據庫調試模式 開啓後能夠記錄SQL日誌 3.2.3新增

當該選項開啓時,會記錄 SQL 日誌,路徑是 ./Application/Runtime/Logs/YourModule/

 

可是當該選項開啓時,沒法自定義處理異常,只能加載系統默認或者自定義的一場模板。若是關閉該選項,同時在開發時與數據庫相關的操做都必須捕獲異常,例如:

        $result = M('session')->field('a')->select();
        if($result === false) {
            //處理
        }

或者

try {
    $result= M("session")->field('a')->select();
} catch (\Exception $e) {
    //處理
}

 

注:捕獲異常能夠參見 ./ThinkPHP/Library/Think/Db/Driver.class.php Line:169

複製代碼
        try{
            $result =   $this->PDOStatement->execute();
            // 調試結束
            $this->debug(false);
            if ( false === $result ) {
                $this->error();
                return false;
            } else {
                return $this->getResult();
            }
        }catch (\PDOException $e) {
            $this->error();
            return false;
        }
相關文章
相關標籤/搜索