【问题标题】:Symfony 2: Purpose of @ operator in app_dev.phpSymfony 2:app_dev.php 中 @ 运算符的用途
【发布时间】: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 我只是在猜测它为什么会在那里。不是说它应该或不应该在那里。但就像格里说的那样。他们不想打印那个通知,因为它更漂亮。他们正在打印自己的错误,如果索引未定义,则会回显。

标签: php symfony


【解决方案1】:

首先 $_SERVER['REMOTE_ADDR'] 可以为空(参见this

错误不会被其他 $_SERVER 变量抑制,因为在 isset 函数内部使用。使用未在 isset 函数中设置的变量(或访问现有数组的元素)不会给出错误或警告,因为验证变量是否已设置是函数本身的作用。

【讨论】:

  • 这就是我要找的答案!
  • 很高兴为您提供帮助,很抱歉英语不好:)
猜你喜欢
  • 2013-06-15
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
相关资源
最近更新 更多