我正在将PEAR Text_LanguageDetect的错误处理重写为异常,并且不知道如何处理异常中的动态数据:
throw new Text_LanguageDetect_Exception(
'Language database does not exist.',
Text_LanguageDetect_Exception::DB_NOT_FOUND
);
在这里,我想要包含试图打开的文件名,但问题是 放置它:
Language database /path/to/file.ext does not exist.
Language database "/path/to/file.ext" does not exist.
Language database does not exist: /path/to/file.ext
Language database does not exist: "/path/to/file.ext"
1 + 2是正确的英语句子,而3 + 4则可以轻松地在代码中查找消息。此外,使用代码提取文件名在3 + 4中更容易。
我应该使用哪一个,为什么?
另一个问题是:我应该在哪里放置文件名?
当我把它作为异常消息时,如果他看到该消息,它可能会给攻击者提供有关服务器上文件结构的信息。没有文件名,就很难调试。
答案 0 :(得分:0)
您应该使用看起来更易读的邮件格式。在代码中依赖异常消息不是一个好习惯。如果你需要这样做,你应该改为对异常进行子类化。
第二个问题:您不应该在生产环境中向用户显示详细错误,因此我不认为包含文件名是一个问题。
答案 1 :(得分:-1)
当抛出异常时,有一个envrionment变量可以告诉你的代码你是在开发还是在线。可以在存储其他系统范围设置的位置设置此项。
如果设置为开发,则输出错误,使调试更容易,如果设置为live,则输出有助于最终用户的错误(或者根本没有错误并优雅地处理它),这将不会提供任何可能成为攻击者的信息。