繁体   English   中英

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

[英]PHP “Notice: Undefined index” is it harmless or a real error?

虽然我的网站没有任何问题,但我突然开始在我的服务器上使用非常高的CPU,因此我开始更仔细地检查代码并启用了E_ALL错误报告。

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

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

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

$uid = $_COOKIE['userID'];

如果用户未登记,我会在那里收到通知,每次我使用$uid

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

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

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

它不是无腿的(取决于观点),你可以使用错误报告功能禁用它,否则,正确的方法是验证索引是否存在isset($_COOKIE['userID']) ,如果没有,则定义默认值value(例如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') {
    [...]
}

这些通知会引起一些速度问题,因为提高通知会花费一些额外的努力。

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

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

通知警告在第一个观点是无害的,但你应该记住,编程是不对的,它可能会导致后续行的错误。

在您的示例中,最好使用它

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

所以你可以肯定,$ uid总是有一个值,当值大于0时你有一个愚蠢的userId ......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM