PHP例外:在哪里放置动态数据?

时间:2012-01-15 11:53:22

标签: php exception

我正在将PEAR Text_LanguageDetect的错误处理重写为异常,并且不知道如何处理异常中的动态数据:

throw new Text_LanguageDetect_Exception(
    'Language database does not exist.',
    Text_LanguageDetect_Exception::DB_NOT_FOUND
);

在这里,我想要包含试图打开的文件名,但问题是 放置它:

  1. Language database /path/to/file.ext does not exist.
  2. Language database "/path/to/file.ext" does not exist.
  3. Language database does not exist: /path/to/file.ext
  4. Language database does not exist: "/path/to/file.ext"
  5. 1 + 2是正确的英语句子,而3 + 4则可以轻松地在代码中查找消息。此外,使用代码提取文件名在3 + 4中更容易。

    我应该使用哪一个,为什么?


    另一个问题是:我应该在哪里放置文件名?

    当我把它作为异常消息时,如果他看到该消息,它可能会给攻击者提供有关服务器上文件结构的信息。没有文件名,就很难调试。

2 个答案:

答案 0 :(得分:0)

您应该使用看起来更易读的邮件格式。在代码中依赖异常消息不是一个好习惯。如果你需要这样做,你应该改为对异常进行子类化。

第二个问题:您不应该在生产环境中向用户显示详细错误,因此我不认为包含文件名是一个问题。

答案 1 :(得分:-1)

当抛出异常时,有一个envrionment变量可以告诉你的代码你是在开发还是在线。可以在存储其他系统范围设置的位置设置此项。

如果设置为开发,则输出错误,使调试更容易,如果设置为live,则输出有助于最终用户的错误(或者根本没有错误并优雅地处理它),这将不会提供任何可能成为攻击者的信息。