天外来客

 找回密码
 注册
查看: 3575|回复: 0
打印 上一主题 下一主题

使用PHP的錯誤處理

[复制链接]

402

主题

0

好友

1547

积分

中级会员

Rank: 4

在线时间
1 小时
威望
112
贡献
0
最后登录
2012-3-31
注册时间
2011-9-1
积分
1547
阅读权限
30
帖子
417
跳转到指定楼层
1#
发表于 2011-9-24 06:06:06 |显示全部楼层 |倒序浏览

在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表單的出錯頁面,這樣網友可以給你一些改進的意見喔。
紧急通知:距去年(重启时隔5年捐助一年的服务器费用)不知不觉又过了一年,费用也消耗完了。现在新用户捐助注册的已经很少,如果一直得不到新用户补充,服务器费用将压力山大,因此决定再次恳求捐助一年费用。在此感谢之前捐助过的朋友!如果不嫌弃恳求再次支持!同时也恳求还没捐助过的朋友出手相助(老用户捐助时备注栏备注你的用户名哦)。在下万分感激!天外来客 2024.7.30
您需要登录后才可以回帖 登录 | 注册

本站所有资源内容均是网友于互联网搜索而来 本站对其所发布的内容不承担任何责任
如果您认为侵犯了您的利益,请电邮告知 229666956@qq.com (附上贴子正确地址)在收到邮件后我们会马上及时删除其内容。

Archiver|手机版|天外来客

GMT+8, 2024-11-1 07:19 , Processed in 0.113698 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部