【发布时间】:2015-07-29 13:29:12
【问题描述】:
在生产服务器上阻止访问调试前端控制器的默认代码是:
if (isset($_SERVER['HTTP_CLIENT_IP'])
|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])
|| !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
所以问题是:为什么需要抑制来自@$_SERVER['REMOTE_ADDR'] 的警告?来自其他 $_SERVER 变量的错误并没有被抑制。
【问题讨论】:
-
Why would it be needed to suppress warnings from ?答案是 :- 用于警告不会显示给最终用户(如果发生任何情况)。 -
可能会抑制未定义的索引通知,因为如果它未定义,它仍然会评估为假。
-
@RobertCathey 所以它可能是为了美化输出。但是什么时候使用 @ 操作符的“基本”规则是什么?显示该通知有什么问题?
-
目的是抑制警告。为什么以及何时这样做真的只是基于意见。
-
@Timofey 我只是在猜测它为什么会在那里。不是说它应该或不应该在那里。但就像格里说的那样。他们不想打印那个通知,因为它更漂亮。他们正在打印自己的错误,如果索引未定义,则会回显。