PHP"注意:未定义的索引"是无害还是真正的错误?

lis*_*aro 4 php debugging

虽然我的网站工作没有任何问题,但我突然开始在我的服务器上拥有非常高的CPU使用率,所以我开始更仔细地检查代码并启用E_ALL错误报告.

然后我发现我有很多这样的"通知":

Notice: Undefined index: userID in /var/www/vhosts/mydomain.com/httpdocs/header.php on line 8
Run Code Online (Sandbox Code Playgroud)

大多数或他们引用未设置的cookie,例如:

$uid = $_COOKIE['userID'];
Run Code Online (Sandbox Code Playgroud)

如果用户未登记,我会立即收到通知,并且每次使用时都会收到通知$uid.

我想知道的是:这些通知是否无害或者它们是否真的会导致我的网站出现任何问题?(速度问题,错误等)

Gab*_*tos 10

这只是一个通知,请尝试以下代码:

$uid = isset($_COOKIE['userID']) ? $_COOKIE['userID'] : 0;
Run Code Online (Sandbox Code Playgroud)

它不是没有Hamless(取决于观点),你可以使用错误报告功能禁用它,否则,正确的方法是验证索引是否存在isset($_COOKIE['userID']),如果不存在,则定义默认值(null例如)

$var = isset($foo) ? $foo : 'default';
Run Code Online (Sandbox Code Playgroud)

如果您不知道变量是否存在,则需要验证变量是否存在.

$var = 'foo'
if($var == 'foo') { // I known $var is defined, because I have defined it.
    [..]
}

/** 
 * Above, I don't known if user go to mywebsite.com/index.php or
 * mywebsite.com/index.php?foo=bar, so, I need to verify if index is defined
 */
if(isset($_GET['foo']) && $_GET['foo'] == 'bar') {
    [...]
}
Run Code Online (Sandbox Code Playgroud)