我看得很远,但是却无法找到与这种特定情况有关的任何内容,我是后端开发人员,总是写(类似的):
if (!defined("something")) define("something", true);
而不仅仅是
define("something"; true);
如果文件包含多次,第二个代码段将触发通知。数组索引的类似情况:
$data = array();
echo $data["does not exist"];
会触发通知,所以我首选的方法是:
$data = array();
if (isset($data["does not exist"]) echo $data["does not exist"];
else echo "Missing info";
PHP有能力抑制这些消息,但我保持启用它们,因为我认为这些检查是良好的做法,但我缺乏证据证明它们需要并且最近一位同事认为存在没有检查就没有影响。
您是否知道在不写支票时有任何安全隐含?或者我可能偏执并且禁用通知是否可以接受?
PS:不确定这个问题是否更适合StackOverflow,但请随时告诉我,我会尝试移动它。
答案 0 :(得分:3)
在开发过程中禁用通知是不可接受的,因为它指出了代码的问题。理想情况下,您的代码应该能够使用E_ALL和E_STRICT错误报告级别运行,并且仍然不会报告任何错误。确切的细节取决于PHP版本,可以找到文档here。
我不认为任何一个选项比另一个选项更多或更不安全,除非存在另一个安全问题,它可能以某种方式掩盖。我认为这两种形式都是不好的做法。
当网站投入生产时,仅记录错误并将ini.display_errors设置为关闭非常重要。如果无法处理产生大量特定错误的代码,那么降低生产中的错误报告级别可能会很有用,但该代码应该得到纠正。
我确实认为代码应该避免生成通知,这可能是一个“较小”的问题,但它仍然是一个应该在开发时处理的问题。
避免这些错误的正确方法是避免多次包含文件。 (请参阅:include_once()或require_once())如果您使用的是框架,则可能包含一种处理包含的方法。请参阅相关文档,并确保您使用其实现来包含文件。
答案 1 :(得分:2)
避免通知是一种很好的做法。
您可能应该学习一点defensive programming并遵循The Right Way。
在开发过程中隐藏错误和通知可能会在将来导致严重问题。 通常,通知会告诉您错误的编程风格或非明显的错误,这些错误往往是棘手的错误,不可维护的代码和安全漏洞。
好的代码永远不会产生通知和错误,因为它可以控制情况发生时。
答案 2 :(得分:0)
有很多方法可以处理系统中的错误和异常。我使用了大量框架并相信我不依赖于display_errors和ini_config标志。
PHP具有先进的功能,可以使用 set_exception_handler 和 set_error_handler 来处理代码生成的错误和异常。因此,如果您想隐藏错误,那么您可以关闭display_errors,但是您应该使用上述两个函数来记录错误。
如果您想在生产方面上传作品后高枕无忧,那么防御性编程非常有用。