使用PHP的错误处理

错误|错误处理

在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调用来进行重定向。

  读者可以自行设计,实现自已的出错页面来适应他/她的站点。不要忘了,你可以包含一个带email的提
交表单在出错页面中,这样用户可以反馈给你一些意见。

时间: 2024-08-01 17:35:21

使用PHP的错误处理的相关文章

“无法创建网站,未指定的错误”错误的解决方法

在Win7系统中使用IE浏览器时,通常情况下都会将自己喜欢的网页添加到收藏夹,也是便后继快捷打开使用.然而在用户打开网页,点击"添加到收藏夹"按钮时,系统却突然弹出了一个"无法创建网站,未指定的错误"的提示窗口.这种状况是由于转移了收藏夹位置,收藏夹对新的文件夹没有完全控制的权限,从而导致添加网址失败的问题,出现收藏夹项目无法查看和刷新的情况,怎么办呢?小编以雨林木风win7旗舰版64位系统为例给大家分享IE无法添加网址到收藏夹简单的解决方案,具体如下: 1.在Wi

解决win7系统唤醒休眠状态出现“拒绝访问”错误的方法

  windows休眠状态是指将所有运行的实时数据存储到硬盘上,并且关闭一切不必要的硬件从而节省电量,无论你所使用的windows是哪个版本,系统都能够让用户自动进入休眠状态,当然在你没有关闭休眠功能的前提下,不过在近期有部分win7用户反映,将系统从休眠状态唤醒时,出现"拒绝访问"的错误,对于该问题我们如何解决呢?下面看为您带来的解决方法! 解决win7系统唤醒休眠状态出现"拒绝访问"错误的方法 第一步.进入Win7系统后,我们在键盘中按"Win+R&q

Win8出现“wermgr.exe - Application Error”的错误

  故障现象: 无法打开EXE文件或程序,wermgr.exe应用程序错误,应用程序错误0x801d8ed0指令引用的0x801d8ed0该内存不能为write 解决方案: 发现原来是"搜狗拼音输入法"导致的,即如果在系统中使用"搜狗拼音输入法"时打开程序软件就会产生"wermgr.exe"的错误(甚至在更改权限的时候也遭到出错).解决方法就是将输入法更改为"ENG"或是"微软拼音输入法"就可以解决问题了.

6大PS里最常见的讨厌错误

  润饰照片是一个专门的学问,所谓最强的PS技术其实就是看不出有PS过.然而在把软件运用自如前,很多人在修图时可能都会犯下一些错误.摄影师Ryan Cooper就写了一篇文章,指出他常常见到的六种PS错误. 以下有一些比较极端的示范例子,让大家能够明显看到差别: 1.恶魔之眼 修图的对象是人类对吧?那就不要把眼白都PS 得像怪物一样发光.记住眼白不是永远也是白色的,如果修图时想把眼睛调亮一点,试试在调光后把图层的透明度变成50%,人的眼睛晴就会自然多了. 2.莫名奇妙的耀光 在制作一个假的耀光前

vs2012-求问,&amp;amp;quot;lnk1158 无法运行rc.exe&amp;amp;quot;错误怎么解决?

问题描述 求问,"lnk1158 无法运行rc.exe"错误怎么解决? 我用的VS2012,一直用的好好地,但是今天突然在编译x64程序的时候出现"lnk1158 无法运行rc.exe"错误.相同的win32程序则未出现此错误. 重装编译器和windows sdk之后无法解决,windows sdk路径应该正确.求问有没有什么解决方法. 解决方案 重装VS2012,看来是被SDK影响了rc.exe工具. 解决方案二: 或者卸掉SDK,直接用VS2012自带的rc.e

动易系统九个常见的错误原因分析及解决方法

错误|解决 错误提示:ADODB.Recordset 错误 '800a0cc1'Item cannot be found in the collection corresponding to the requested name or ordinal./index.asp,行15 错误原因:服务器上安装动易组件最新组件,但网站系统是用的4.0,系统没有找到相应的字段.动易组件从4.02开始向下兼容,但不兼容4.0.解决方法:请在升级网站系统至最新版本. =====================

asp连接access错误:Microsoft JET Database Engine (0x80004005) 未指定的错误

在一次配置网站空间的过程中,把一个调试好的程序上传到服务器,出现连接数据库错误:Microsoft JET Database Engine (0x80004005) 未指定的错误 出现错误后,百般调试不得其解.先后给ACCESS数据库目录所有权限,数据库文件修复压缩等等方法,问题依然出现,后来翻阅一些资料后,找到解决方法! 连接ACCESS数据库错误 错误类型:Microsoft JET Database Engine (0x80004005) 未指定的错误 原因:在服务器安全配置中,没有开放I

IIS6.0 ASP 错误解析

iis|错误|iis 事 件ID 描 述0100内存不足.无法分配所需的内存. 0101意外错误.函数返回.0102要求字符串输入.函数需要字符串输入.0103要求数字输入.函数需要数字输入.0104不允许操作.0105索引超出范围.数组索引超出范围.0106类型不匹配.遇到未处理的数据类型.0107数据大小太大.请求中发送的数据大小超出允许的限制.0108创建对象失败.创建对象 '%s' 时出错.0109成员未找到.0110未知的名称.0111未知的界面.0112参数丢失.0113脚本超时.超

计算机改名引发的ORA-12541: TNS无监听程序错误

 近期上班时,由于开机时老是提示" 局域网出现计算机重名冲突",于是把计算机名字给改了,从PC2010081312zeo改为了CXBIKKKKKKK,结果第二天来的时候,用 PL/SQL连接我本地机子的ORACLE实例时,弹出ORA-12541:TNS无监听程序错误的提示,当时也没想到是计算机改名引起的问题,以为是相 关服务没有启动缘故,于是我打开服务面板,如图所示,发现 OracleOraDb10g_home1TNSListener服务没有启动,于是启动这个服务,结果等我启动后,出现

vs2010新建项目是表如下图的错误怎么解决?按图中的路径寻找不到activitylog.xml

问题描述 vs2010新建项目是表如下图的错误怎么解决?按图中的路径寻找不到activitylog.xml