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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
一个简单计数器的源代码
Oct 09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
一道关于php变量引用的面试题
Aug 08 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
php微信开发之谷歌测距
Jun 14 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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制作静态网站的模板框架(二)
2006/10/09 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
django模板语法学习之include示例详解
2017/12/17 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
基于python操作ES实例详解
2019/11/16 Python
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
管理失职检讨书
2014/02/12 职场文书
社区戒毒工作方案
2014/06/04 职场文书
本溪关门山导游词
2015/02/09 职场文书
大学学生会竞选稿
2015/11/19 职场文书
企业文化学习心得体会
2016/01/21 职场文书
导游词之无锡唐城
2019/12/12 职场文书
Python入门之基础语法详解
2021/05/11 Python
日元符号 ¥
2022/02/17 杂记