代码之家  ›  专栏  ›  技术社区  ›  Chris

php try catch错误报告

  •  3
  • Chris  · 技术社区  · 15 年前

    我有一个依赖于soap服务器来生成内容的应用程序。此外,对站点的身份验证基于单独的LDAP服务器。显然,如果这两个都关闭或没有反应的网站是关闭。

    我试图布局这样一个设计,我可以有网站管理员的错误报告,也给了一个很好的信息,以用户的情况下,该网站是关闭的。错误报告实际上只是PHPs$\u COOKIE、$\u server、$\u SESSION、$\u 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} 
    

    从上面糟糕的图表来看:-)我有一个类客户机,它包含了soapfault异常的所有try-catch块,我想知道用catch做两件事的最佳方法: 1通知用户操作失败(我的所有功能都在if/else块中,如果我确定操作失败,我会将用户重新引导到状态页,并通知他们操作失败。
    2将情况报告给站点管理员进行调试(目前这个功能是在status page中定义的一个简单函数,当status page得到错误代码时,我们转储Cookier、Server、Session和Request变量,并通过电子邮件发送给站点管理员。

    如果您对此有任何建议,我们将不胜感激,如果您需要澄清,请询问。

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   ircmaxell    15 年前

    我个人认为这取决于错误。根据我的经验,有三种例外。可以忽略的、可以解决的以及用于终止执行的(A) file_not_found 如果只是尝试删除文件,则可以忽略异常 resource_not_available 如果有资源的替代源,并且 database_connection_failure 例外情况将要求终止应用程序,除非您有备份)。。。捕获了哪种类型的异常将决定如何处理它。

    我个人安装了一个 global exception handler

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

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