PHP出错界面


Posted in PHP onOctober 09, 2006

在web 上所有常见的错误之一就是无效的链接。一旦从其它站点上出现了无效的链接,你会重新安排你
的站点。人们会将他们喜欢的站点存成书签,如果在三个月后再次访问时,仅仅发现的是'404 Not Fount '
时,将不会给他们任务帮助,告诉他们如何从你的站点去查找原始的信息。让我们解决这个问题,或者至少
给你的用户一个友好的帮助,一旦他们遇到'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调用来进行重定向。 

PHP 相关文章推荐
php 分页原理详解
Aug 21 PHP
PHP缓存技术的使用说明
Aug 06 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
LNMP部署laravel以及xhprof安装使用教程
Sep 14 PHP
PHP7新功能总结
Apr 14 PHP
PHP实现抽奖功能实例代码
Jun 30 PHP
ftp类(myftp.php)
Oct 09 #PHP
第1次亲密接触PHP5(2)
Oct 09 #PHP
PHP的FTP学习(一)[转自奥索]
Oct 09 #PHP
一个多文件上传的例子(原创)
Oct 09 #PHP
[FAQ]PHP中的一些常识:类篇
Oct 09 #PHP
Oracle Faq(Oracle的版本)
Oct 09 #PHP
PHP 和 HTML
Oct 09 #PHP
You might like
php利用cookie实现访问次数统计代码
2011/05/19 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
php传值方式和ajax的验证功能
2017/03/27 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
vue实现微信分享功能
2018/11/28 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
浅谈Python中函数的参数传递
2016/06/21 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
ipython和python区别详解
2019/06/26 Python
python yield关键词案例测试
2019/10/15 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
技校生自我鉴定范文
2013/09/26 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
五年级科学教学反思
2014/02/05 职场文书
消防安全宣传口号
2014/06/10 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
民主生活会剖析材料
2014/09/30 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js