4

当我的网站正常运行时,我突然开始在我的服务器上使用非常高的 CPU 使用率,因此我开始更仔细地检查代码并启用E_ALL错误报告。

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

Notice: Undefined index: userID in /var/www/vhosts/mydomain.com/httpdocs/header.php on line 8

大多数或他们指的是未设置的cookies,例如:

$uid = $_COOKIE['userID'];

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

如果是这样,我想知道:此通知是否无害,或者它们真的会在我的站点中引起任何问题?(速度问题、错误等)

4

4 回答 4

10

这只是一个通知,试试这个代码:

$uid = isset($_COOKIE['userID']) ? $_COOKIE['userID'] : 0;

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

$var = isset($foo) ? $foo : 'default';

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

$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') {
    [...]
}
于 2012-07-05T06:56:38.257 回答
2

这些通知会引起一点速度问题,因为发出通知需要付出一些额外的努力。

但主要问题是这是一个严重的错误。您正在尝试使用不存在的东西。这可能会或可能不会导致坏事发生,但这意味着您的程序不正确。由于您应该始终使用错误报告来查看和解决实际问题,因此有关未定义索引或未定义变量的通知很严重,需要解决。PHP 抱怨的任何事情都是严重的,需要解决。请参阅PHP 的 isset 和 empty 权威指南

于 2012-07-05T07:00:04.137 回答
1

通知通常是无害的,但它们可能表明应用程序设计不佳。一般来说,利用可用的 PHP 工具(即isset($someVar))来确保您的业务逻辑正确处理变量初始化总是一个好主意。当您在 E_ALL 错误报告设置中看不到此类通知时,总是更好。

于 2012-07-05T07:00:27.780 回答
0

注意警告从第一角度来看是无害的,但您应该记住,编程不正确,它可能会导致以下行出现错误。

在您的示例中,最好使用

$uid = isset($_COOKIE['userID'])?$_COOKIE['userID']:0;

所以你可以确定,$uid 总是有一个值,当值大于 0 时,你有一个无效的 userId ...

于 2012-07-05T07:01:06.333 回答