阻止访问生产服务器上的调试前端控制器的默认代码是:
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变量的错误并未得到抑制。
答案 0 :(得分:1)
首先$ _SERVER ['REMOTE_ADDR']可能为空(请参阅this)
错误不会从其他$ _SERVER变量中删除,因为它们在isset函数中使用。使用未在isset函数中设置的变量(或访问现有数组的元素)将不会给出错误或警告,因为验证变量是否设置是函数本身的角色。