天外来客

标题: 使用PHP的錯誤處理 [打印本页]

作者: za1    时间: 2011-9-24 06:06
标题: 使用PHP的錯誤處理

在web 上所有常見的錯誤之一就是無效的連接。一旦從其它站點上出現了無效的連接,你會重新安排你的站點。人們會將他們喜歡的站點存成書籤,如果在三個月後再次訪問時,僅僅發現的是'404 Not Found'時,將不會給他們任何幫助,告訴他們如何從你的站點去查找原始的訊息。讓我們解決這個問題,或者至少給你的網友一個友好的幫助,一旦他們遇到'a 404' 錯誤時,能夠得到一些痕跡。你可以建立普通的頁面來報告在處理你的頁面時所遇到的所有的錯誤。

  PHP 與Apache一起可以很自由地讓你建立自已的出錯頁面,但是需要重新進行配置,並且要設計少量的程式碼。先讓我們學習配置部分。

  Apache的ErrorDocument指示用來指出在出現錯誤時Apache應重定向到哪一個文件(或URI)。它允許你為每一個你的用戶可能遇到的錯誤程式碼指定一個資源。通過在你的伺服器配置中增加一個ErrorDocument 404 /error.php指示。這個將在用戶訪問一個不存在的頁面時,重定向到'error.php'中,下面我們就會寫出'error.php'頁面。不要忘了重新啟動Apache以使改動生效。

  接著,我們寫出一個簡單的error.php:

你所請求的文件 (<?=$REDIRECT_URL?>) 在這個伺服器上不存在。
請查找你想要的文件從 <A HREF="/">前頁</A>。

  現在試著讀取一個在你伺服器上不存在的頁面,怎麼樣,你可以看到error.php了,它有著一個良好和友好的消息,並且還有一個到前頁的連接。

  讓我們把它擴充一下。正如你所見,我在error.php中使用了REDIRECT_URL變數。這個變數是Apache在執行了一個ErrorDocument指示時所設置的,並且給出了一種可能來找到原始的資源。在這種情況下,Apache 還設置了一些別的變數,所有的變數可以在這裡找到。使用這些變數可能建立一個很好的出錯頁面,用於給用戶一個不錯與友好的出錯頁面,而代替Apache給出的預設頁面。

從PHP頁面中輸出錯誤

  從一個PHP頁面輸出錯誤與模擬Apache對ErrorDocument指示所做的很像,你隻要簡單地將用戶重新導向,通過使用query-string變數,而Apache則通常是設置在環境變數裡面。這樣就可以使用同一個出錯頁面來處理各種錯誤。下面是一個例子:


--------------------------------------------------------------------------------
<?php

function throw_error($message) {
$error_page = "/err/error.php";

$error_url = $error_page;
$error_url .= "?REDIRECT_ERROR_NOTES=$message";
$error_url .= "&REDIRECT_URL=" . $GLOBALS["PHP_SELF"];
$error_url .= "&REDIRECT_REQUEST_METHOD=$REQUEST_METHOD";
$error_url .= "&REDIRECT_STATUS=501";
Header("Status: 501");
Header("Location: $error_url");
exit;
}

ob_start();
// 使用輸出緩衝以便在這頁中的任何地方輸出錯誤

if(!condition) {
throw_error("the condition failed");
}

ob_end_flush();
// 頁面處理完畢,重新整理輸出緩衝

?>--------------------------------------------------------------------------------
  使用PHP4的輸出緩衝特性對於產生一般的錯誤報告功能也會有幫助。但是在你確認整個出錯頁面處理完畢時,不要忘記重新整理緩衝區,你可以在你的程式碼中的任可地方通過Header使用來進行重新導向。

  大家可以自行設計,製作出自已的出錯頁面。不要忘了,你可以包含一個帶有email表單的出錯頁面,這樣網友可以給你一些改進的意見喔。

作者: dilei    时间: 2011-10-30 20:15
很多人都不会吧
作者: yyysss    时间: 2011-10-30 20:52
喜欢就下载吧
作者: kumo0218    时间: 2012-12-24 00:40
感谢分享!




欢迎光临 天外来客 (http://twlkbt.com/) Powered by Discuz! X2.5