解決方法:找Thinkphp3.2.3手冊,內容如下!
和PHP預設的異常處理不同,ThinkPHP拋出的不是單純的錯誤訊息,而是一個人性化的錯誤頁面,如下圖所示:
只有在調試模式下面才能顯示具體的錯誤訊息,如果在部署模式下面,你可能看到的是一個簡單的提示文字,例如:
一旦關閉調試模式,發生錯誤後不會提示具體的錯誤訊息,如果你仍然希望看到具體的錯誤訊息,那麼可以如下設定:
ThinkPHP/Conf/convention.php裡設定
<code class="hljs php"><span class="hljs-string">'SHOW_ERROR_MSG' => <span class="hljs-keyword">true, <span class="hljs-comment">// 显示错误信息</span></span></span></code>
如果你試圖在部署模式下存取一個不存在的模組或操作,會發送404錯誤。
調試模式下面一旦系統發生嚴重錯誤會自動拋出異常,也可以用ThinkPHP內建的E方法手動拋出異常。
<code class="hljs bash">E(<span class="hljs-string">'新增失败');</span></code>
也可以支援異常代碼(預設為0),例如:
<code class="hljs bash">E(<span class="hljs-string">'信息录入错误',<span class="hljs-number">25);</span></span></code>
同樣也可以使用throw 關鍵字來拋出異常,下面的寫法是等效的:
<code class="hljs php"><span class="hljs-keyword">throw <span class="hljs-keyword">new \Think\<span class="hljs-keyword">Exception(<span class="hljs-string">'新增失败');</span></span></span></span></code>
我們可以自訂異常頁面的顯示,系統內建的異常模板在系統目錄的Thinkphp/Tpl/think_exception.tpl
,可以透過修改系統模板來修改異常頁面的顯示。
也透過設定TMPL_EXCEPTION_FILE設定參數來修改系統預設的異常模板文件, 例如:
ThinkPHP/Conf/convention.php裡設定
<code class="hljs php"><span class="hljs-string">'TMPL_EXCEPTION_FILE' => APP_PATH.<span class="hljs-string">'/Public/exception.tpl'</span></span></code>
異常模板中可以使用的異常變數有:
<code class="hljs bash"><span class="hljs-variable">$e[<span class="hljs-string">'file']异常文件名 <span class="hljs-variable">$e[<span class="hljs-string">'line'] 异常发生的文件行数 <span class="hljs-variable">$e[<span class="hljs-string">'message'] 异常信息 <span class="hljs-variable">$e[<span class="hljs-string">'trace'] 异常的详细Trace信息</span></span></span></span></span></span></span></span></code>
因為異常模板使用的是原生PHP程式碼,所以也可以支援任何的PHP方法和系統變數使用。
拋出異常後通常會顯示具體的錯誤訊息,如果不想讓使用者看到具體的錯誤訊息,可以設定關閉錯誤訊息的顯示並設定統一的錯誤提示訊息,例如:
ThinkPHP/Conf/convention.php裡設定
<code class="hljs php"><span class="hljs-string">'SHOW_ERROR_MSG' => <span class="hljs-keyword">false, <span class="hljs-string">'ERROR_MESSAGE' => <span class="hljs-string">'发生错误!'</span></span></span></span></code>
設定之後,所有的異常頁面只會顯示「發生錯誤!」這樣的提示訊息,但是日誌檔案中仍然可以查看特定的錯誤訊息。
系統的預設情況下,偵錯模式是開啟錯誤訊息顯示的,部署模式則關閉錯誤訊息顯示。
另外一種方式是配置ERROR_PAGE參數,把所有異常和錯誤都指向一個統一頁面,從而避免讓用戶看到異常信息,通常在部署模式下面使用。 ERROR_PAGE參數必須是一個完整的URL位址,例如:
ThinkPHP/Conf/convention.php裡設定
<code class="hljs php"><span class="hljs-string">'ERROR_PAGE' =><span class="hljs-string">'/Public/error.html' 系统默认为空</span></span></code>
如果不在目前域名,也可以指定域名:
<code class="hljs scala"><span class="hljs-symbol">'ERROR_PAGE' =><span class="hljs-symbol">'http:<span class="hljs-comment">//www.myDomain.com/Public/error.html'</span></span></span></code>
注意ERROR_PAGE所指向的頁面不能再使用異常的模板變數了。