Symfony 2:app_dev.php中@运算符的用途

时间:2015-07-29 13:29:12

标签: php symfony

阻止访问生产服务器上的调试前端控制器的默认代码是:

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变量的错误并未得到抑制。

1 个答案:

答案 0 :(得分:1)

首先$ _SERVER ['REMOTE_ADDR']可能为空(请参阅this

错误不会从其他$ _SERVER变量中删除,因为它们在isset函数中使用。使用未在isset函数中设置的变量(或访问现有数组的元素)将不会给出错误或警告,因为验证变量是否设置是函数本身的角色。