3

我有一个依赖肥皂服务器来生成内容的应用程序。此外,对站点的身份验证基于单独的 LDAP 服务器。显然,如果其中任何一个出现故障或没有响应,则该站点已停机。

我正在尝试设计一个设计,以便我可以为站点管理员提供错误报告,并在站点关闭的情况下向用户提供一个很好的消息。错误报告实际上只是电子邮件、数据库插入或日志到 PHP 的服务器上的文本文件 $_COOKIE、$_SERVER、$_SESSION、$_REQUEST 以及潜在的 SoapFault 异常。这些信息将帮助我调试网站出现的任何潜在问题。

目前,我的网站设计如下:

SoapClientInterface (defines soap functionality)
      / \
       |
       |   implements
       |
Client (the client implementing the interface, try/catch blocks on all soap calls here) 
      / \
       |
       |  extends
       |
 Authorization (asserts soap objects returned from server/ requests going to server 
               are appropriate for the user performing the request) 
      / \
       |
       | extends
       | 
  {all children classes using the soap interface defined on this level} 

从上面的糟糕图表中:-) 我有一个类 Client,它包含我所有的尝试 catch 块,用于处理 soapfault 异常,我想知道用 catch 做两件事的最佳方法:1. 通知用户一个操作失败(我所有的功能在 if/else 块中,如果我确定操作失败,我会将用户重定向到状态页面并通知他们他们的操作失败
。2. 将情况报告给站点管理员以进行调试(目前此功能是状态页面中定义的一个简单函数,当状态页面收到错误代码时,我们会转储 Cookie、服务器、会话和请求变量并将其通过电子邮件发送给站点管理员。

对此的任何建议将不胜感激,或者如果您需要澄清,请询问。

编辑:根据我的网络编程经验,我的应用程序通常会在发生操作的页面上显示用户操作的状态,并且不会重定向到其他地方。这是我第一次编写应用程序来执行用户操作并将所有状态消息重定向到单独的页面。我是否应该为这样做而自责,是否有人认为为所有站点操作提供一个状态页面或在发生该操作的页面上报告状态的类/函数有什么好处?(我问这个是关于自己考虑状态页面的设计以及如何报告错误等等。)

4

1 回答 1

1

好吧,我个人认为这取决于错误。根据我的经验,有三种类型的例外。那些你可以忽略的,你可以解决的,以及你用来终止执行的那些(file_not_found如果你只是想删除文件,可以忽略异常,resource_not_available如果有异常可以解决资源的替代来源,database_connection_failure除非您有备份,否则异常将需要终止应用程序).​​..捕获哪种类型的异常将决定您如何处理它。

就个人而言,我安装了一个全局异常处理程序......然后,在我的 catch 块中,我可以选择是否清理请求,以不同方式处理它,继续(如果它是可恢复的异常),或者如果可以的话重新抛出异常'不能正确处理(查询错误等)。如果异常到达堆栈顶部(全局处理程序),那么我记录错误(为此我使用数据库表)并抛出 500 内部服务器错误。

至于重定向错误,我不能忍受。如果错误是时间错误,那为什么我不能刷新页面?为什么我必须回去(如果我可以的话)再试一次......

只要您正确输出缓冲区,您几乎总是能够在不向用户显示任何敏感信息的情况下呈现错误页面(我说几乎,因为您无法为致命错误呈现任何内容)......否则你'重新破坏 HTTP 规范(因为您说从发生错误的当前页面有一个临时重定向,而不是正确的“发生错误”状态标头)...

于 2010-08-16T12:36:46.137 回答